关于Thread中的join方法貌似在实际多线程编程当中没怎么用过,在当初学j2se的时候倒时去学习过它的用法,不过现在早已经忘得差不多啦,所以对它再复习复习下. 首先先观察下JDK对它的介绍: 其实就是等待一个线程结束,对它记忆中还是有印象的,下面实践一下: 这时很显然打印是交替进行的: 那如果我们想让子线程执行完了之后再执行主线程呢?这时就可以用join来实现啦,如下: 这时结果就是先输出子线程的,然后再输出主线程的了,那join的主要作用就是会等待线程执行完,另外需要注意:join()必须…
前言 在日常的开发过程中,我们通过会使用Thread.sleep模拟一个耗时的任务执行过程. 在深入理解这四个方法之前,首先对线程的状态进行理解阐述. 线程概念 线程是操作系统执行任务的基本单位,处理器的数量决定了不可能所有的线程同时得到运行,这就意味着需要通过某种算法,如window下的抢占式,进行线程的调度.注:就绪也就是可运行状态,拥有CPU资源但还未处于运行中.   一个线程从开始到结束可能会有上述几种状态,之间可以互相转换. Thread.sleep Sleep意味着线程主动告诉操作系…
join方法的作用是同步线程. 1.不使用join方法:当设置多个线程时,在一般情况下(无守护线程,setDeamon=False),多个线程同时启动,主线程执行完,会等待其他子线程执行完,程序才会退出. def print_number(num): print("-----> %d" % num, time.ctime()) time.sleep(5) print("print_number ending......", time.ctime()) def…
Java并发编程中,其中一个难点是对线程生命周期的理解,和多种线程控制方法.线程沟通方法的灵活运用.这些方法和概念之间彼此联系紧密,共同构成了Java并发编程基石之一. Java线程的生命周期 Java线程类定义了New.Runnable.Running Man.Blocked和Dead五种状态. New 当初始化了一个线程对象之后,线程就进入了New的状态.此时JVM会为其分配堆内存.初始化成员变量的值,获取当前线程为父线程. Runnable 当调用线程对象的start方法之后,就进入Run…
/* 线程合并:将指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程,即单线程. 如在B线程中调用了A的join方法,则线程A执行完后,才会执行线程B. */ public class ThreadTest05 { public static void main(String[] args) throws Exception { Thread t = new Thread(new Processor()); t.setName("t"); t.start(); //…
   线程的概述:         线程是程序的多个执行路径,执行调度的单位,依托于进程存在.线程不仅可以共享进程的内存,而且还拥有一个属于自己的内存空间,这段内存空间叫做线程栈,是建立线程的时候由系统分配的,主要用来保存线程内部的数据,如线程执行函数中定义的变量.   java中多线程是一种抢占机制而不是分时机制.抢占机制是指CPU资源师被多个线程所共享,多个线程处于可运行状态,但是只允许一个线程在运行,他们通过竞争的方式抢占CPU.可以参考java 进程与线程的区别…
join方法的功能就是使异步执行的线程变成同步执行.也就是说,当调用线程实例的start方法后,这个方法会立即返回,如果在调用start方法后后需要使用一个由这个线程计算得到的值,就必须使用join方法.如果不使用join方法,就不能保证当执行到start方法后面的某条语句时,这个线程一定会执行完.而使用join方法后,直到这个线程退出,程序才会往下执行.下面的代码演示了join的用法. package mythread; public class JoinThread extends Thre…
(一)项目框架分析 妈妈要去做饭,发现没有酱油,让儿子去买酱油,然后回来做饭. 根据面向对象的思想,有两个对象,妈妈和儿子 主要有两个方法: (一)没有线程控制(即儿子没有买酱油回来妈妈就做好饭了)+(没有调用jion方法) (二)有线程控制(妈妈进程和儿子进程又先后影响)+(调用jion方法) 项目的结构图: (二)没有进程控制mintak Son.java主要是模拟儿子的行动,儿子买酱油的行动(与有进程控制的源程序相同) 代码如下: public class Son implements R…
执行逻辑:在当前代码块(比如main方法)中的线程A执行了join方法, 那么当代码块(main)执行到join方法时,会停止继续向下执行,一直到线程A执行完毕, main方法才会继续向下执行. 代码一: package com.thread; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; im…