美文网首页
怎样判断线程已执行结束

怎样判断线程已执行结束

作者: 小小的Jobs | 来源:发表于2019-05-01 21:33 被阅读0次

待的事情都已经发生。可以使用闭锁来这样设计程序达到目的:

1 public class CountDownLatchApproach { 2    public static void main(String[] args) throws IOException, InterruptedException { 3        final int nThreads = 10; 4        final CountDownLatch endGate = new CountDownLatch(nThreads); 5        final File stream = new File("c:\\temp\\stonefeng\\stream.txt"); 6        final OutputStream os = new FileOutputStream(stream); 7        final OutputStreamWriter writer = new OutputStreamWriter(os); 8        ExecutorService exec = Executors.newCachedThreadPool(); 9        for (int i = 0; i < nThreads; i++) { 10            final int num = i; 11            Runnable task = new Runnable() { 12                @Override 13                public void run() { 14                    try { 15                        writer.write(String.valueOf(num)+"\n"); 16                    } catch (IOException e) { 17                        e.printStackTrace(); 18                    } finally { 19                        endGate.countDown(); 20                    } 21                } 22            }; 23            exec.submit(task); 24        } 25        endGate.await(); 26        writer.write("---END---\n"); 27        writer.close(); 28    } 29 }

这种解决方案虽然可以达到目的但是性能差到没朋友,我更倾向于使用第一种方案。

现在我们有了更优雅的第三种方案,它的执行性能也不错。

1 public class MySemaphore { 2 3    public static void main(String[] args) throws IOException, InterruptedException { 4        final File stream = new File("c:\\temp\\stonefeng\\stream.txt"); 5        final OutputStream os = new FileOutputStream(stream); 6        final OutputStreamWriter writer = new OutputStreamWriter(os); 7        final Semaphore semaphore = new Semaphore(10); 8        ExecutorService exec = Executors.newCachedThreadPool(); 9        10        final long start = System.currentTimeMillis(); 11        for (int i = 0; i < 10000000; i++) { 12            final int num = i; 13            Runnable task = new Runnable() { 14                @Override 15                public void run() { 16                    try { 17                        semaphore.acquire(); 18                        writer.write(String.valueOf(num)+"\n"); 19                        semaphore.release(); 20                    } catch (IOException e) { 21                        e.printStackTrace(); 22                    } catch (InterruptedException e) { 23                        e.printStackTrace(); 24                    } 25                } 26            }; 27            exec.submit(task); 28        } 29        exec.shutdown(); 30        exec.awaitTermination(1, TimeUnit.HOURS); 31        writer.write("---END---\n"); 32        writer.close(); 33        System.out.println("ËùÓеÄ×ÓÏ̶߳¼½áÊøÁË£¡");  34        final long end = System.currentTimeMillis(); 35        System.out.println((end-start)/1000); 36    } 37

相关文章

  • 怎样判断线程已执行结束

    待的事情都已经发生。可以使用闭锁来这样设计程序达到目的: 1 public class CountDownLatc...

  • 代码片段1

    判断是否在主线程执行

  • 线程-11.24

    1.使用threading模块 单线程执行: 多线程执行: 主线程会等待所有的子线程结束后才结束 查看线程数量: ...

  • Java19守护线程

    在程序后台执行的线程,当程序结束时,守护线程也结束。程序结束:所有的非守护线程结束。

  • Java并发编程艺术(六) Java中的线程池、Executor

    1、线程池的实现原理 线程池判断核心线程池里的线程是否都在执行任务,如果不是,则创建新的工作线程来执行,如果都在执...

  • 线程池的工作流程理解与项目中实战

    线程池主要处理流程 1.线程池判断核心线程是否已经满了,否 则会创建线程执行任务,是 进入下一个流程2.线程池判断...

  • 多线程资源释放

    正常释放 等待线程执行结束,和回收资源。 线程在函数执行结束以后,需要回收资源。线程有两种状态joinable和u...

  • Python学习08-判断 语句if

    if 判断语句 先判断 在执行,从上到下判断 ,如初出现True的话,执行。 结束 if<条件判断1>: <...

  • python中的线程

    1、多线程执行 线程是实现多任务的一种手段。 如果创建Thread时执行的函数,运行结束那么意味着 这个子线程结束...

  • 终止线程方式

    正常运行结束 程序运行结束,线程自动结束。 使用退出的标志退出线程 一般 run()方法执行完,线程就会正常结束,...

网友评论

      本文标题:怎样判断线程已执行结束

      本文链接:https://www.haomeiwen.com/subject/skawnqtx.html