【JAVA中,当某一段程序一直运行或卡死导致程序无法向下运行的时候,如何跳过卡住的那一步继续往下执行】 您所在的位置:网站首页 java返回代码的某一段重新执行 【JAVA中,当某一段程序一直运行或卡死导致程序无法向下运行的时候,如何跳过卡住的那一步继续往下执行】

【JAVA中,当某一段程序一直运行或卡死导致程序无法向下运行的时候,如何跳过卡住的那一步继续往下执行】

2024-07-16 13:54| 来源: 网络整理| 查看: 265

JAVA中,当某一段程序一直运行或卡死导致程序无法向下运行的时候,如何跳过卡住的那一步继续往下执行 主要技术主要思路示例代码代码讲解 总结

主要技术

`

主要运用的技术为线程池和Future。

`

主要思路

把一直在运行或者运行卡死的程序放到一个线程中,当运行一段时间后判断线程卡死,结束该线程即可跳过。

示例代码

代码如下(示例):

@Test public static void test(ControlChannel channel) throws InterruptedException { byte[] bytes1 = UDPSender.send(channel); ExecutorService executorService = Executors.newFixedThreadPool(1); Future future = executorService.submit(() -> { byte[] bytes = new byte[4]; DatagramSocket socket = new DatagramSocket(18085); DatagramPacket packet = new DatagramPacket(bytes, bytes.length); socket.receive(packet); socket.close(); byte[] bytes2 = packet.getData(); if (bytes2 == null) { } else { boolean equals = Arrays.equals(bytes1, bytes2); if(!equals){ UDPSender.send(channel); }else { System.out.println("true"); } } return ""; }); Thread.sleep(2000); if (!future.isDone()) { System.out.println("没有接收到反馈"); // future.cancel(true); // executorService.shutdown(); } } } 代码讲解

该代码的目的是通过udp传输信息之后,会有一个应答机制,接收方会给传输方一个反馈,发送方接收反馈判断是否发送与接收成功、发送的内容是否正确。由于发送方不知道接收方是否存活,如果接收方已停止,则发送方会一直等待接收,所以需要一段时间后判断接收方已死亡,并且跳过接收。

首先通过ExecutorService创建线程池,然后把要跳过的代码放进去。

然后用Future获取线程运行状态

使用future.isDone()方法判断线程是否执行完成,如果没有执行完成,则强制关闭。

总结

这些主要还是对于多线程和异步线程的运用,不是难点,但是平时运用并不太多。线程对于程序这一块儿还是很重要的,合理利用线程可以提升代码运行效率。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有