zoukankan      html  css  js  c++  java
  • 多线程之join方法

    join方法用得不多,当A线程执行到了B线程的join()方法时,A就会等待,等B线程都运行完,A线程才会执行。使用join()方法时,会产生异常。

    用一个小程序说明join方法的使用技巧:

    public class MyThreadSleep extends Thread{
    
        @Override
        public void run() {
            for (int i = 0; i < 100; i++) {
              System.out.println(Thread.currentThread().getName());
                if (i % 10 == 0 ) {
                    System.out.println("--------"+i);
                }
                /*try {
                    Thread.sleep(1);
                    System.out.println("sleep 1 ms");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }*/
                
            }
        }
    
        public static void main(String[] args) throws InterruptedException {
            MyThreadSleep t1 = new MyThreadSleep();
            t1.start();
            t1.join();//当前线程加入阻塞队列即main方法进入阻塞状态,主线程只有等到线程t1执行完才可以进入可执行状态
            MyThreadSleep t2 = new MyThreadSleep();
            t2.start();
    
            for(int x=1; x<100; x++)
            {
               System.out.println(Thread.currentThread().getName() + "..." + x);
            }
        }
    }

    主线程向下转时,碰到了t1.join(),t1要申请加入到运行中来,就是要CPU执行权。这时候CPU执行权在主线程手里,主线程就把CPU执行权给放开,陷入冻结状态。活着的只有t1了,只有当t1拿着执行权把这些数据都打印完,主线程才恢复到运行中来

    join方法可以用于临时加入线程,一个线程在运算过程中,如果满足于条件,我们可以临时加入一个线程,让这个线程运算完,另外一个线程再继续运行。

    如果将t1.join()和t2.start()位置互换,又会怎样呢?主线程开启了t1、t2,这时候CPU执行权还在主线程手里。当主线程碰到了t1.join(),释放执行权,处于冻结状态。活着的t1、t2都具备执行资格,这时候CPU便对t1和t2交替执行。主线程要等到t1结束才能活,至于t2结不结束,与主线程没有丝毫关系。如果t1结束了,t2还没结束,主线程就会和t2抢执行权执行。主线程碰到谁的join,它就等谁。也就是说,谁让它把执行权放出来,它就等谁死。至于谁去抢,它不管

    参考:http://blog.sina.com.cn/s/blog_a79dc81e01015psh.html

  • 相关阅读:
    Django-01
    tkinter模块常用参数(python3)
    Python3 数据可视化之matplotlib、Pygal、requests
    python面试题(二)
    python 面试题(一)
    Python 用Redis简单实现分布式爬虫
    用python的正则表达式实现简单的计算器功能
    Python操作 RabbitMQ、Redis、Memcache
    自定义线程池
    21天学通Python课后实验题4.6
  • 原文地址:https://www.cnblogs.com/bpynfy/p/5649205.html
Copyright © 2011-2022 走看看