厦门建站服务,wordpress添加小说板块,已矣seo排名点击软件,建设银行个人网上银行登录1.join()
join方法可以在多线程中帮我们实现调用线程的同步效果#xff0c;比如#xff0c;现在有三个线程#xff0c;a#xff0c;b#xff0c;c
a中启动了b和c线程异步去执行一件事#xff0c;但是a希望他们做完以后再继续往下执行#xff0c;那么就可以在调用b和c启…1.join()
join方法可以在多线程中帮我们实现调用线程的同步效果比如现在有三个线程abc
a中启动了b和c线程异步去执行一件事但是a希望他们做完以后再继续往下执行那么就可以在调用b和c启动之后调用每个线程的join方法意思是等待它们执行完毕代码如下 public static void main(String[] args) throws InterruptedException {Thread thread new Thread() {Overridepublic void run() {System.out.println(我是线程1);}};Thread thread1 new Thread() {Overridepublic void run() {System.out.println(我是线程2);}};thread.join();thread1.join();System.out.println(我是主线程);}
2.interrupt()
这个方法可以理解成打断线程的当前状态有以下几个场景啊:我们通常可以用来实现通过一个线程控制另一个线程是否运行在需要通知另一个线程的时候调用interrupt(),然后在停止的线程中有一个判断逻辑判断当前线程的状态
打断阻塞状态下的线程比如调用了sleep或者是yield方法等如果这个时候别的线程调用了该线程的interrupt()方法就会抛出一个interruptedException,并且把是否打断状态改为false打断正在运行的线程意思就是正在执行别的代码没有处于sleep或别的状态下那么这个时候就会把thread1.isInterrupted()值改为true打断parkpark就是让当前线程阻塞调用该线程的interrupt(),可以让它继续向下运行但是注意哦park方法是否继续向下运行依靠的是当前线程thread1.isInterrupted()是否为true如果为true则无法再次阻塞意思就是假如一个线程调用了一次LockSupport.park()方法此时另一个线程打断了它那么它继续往下运行的时候又调用了一次LockSupport.park()方法是没办法阻塞的因为这个时候当前线程的isInterrupted()为true所以如果希望再次往下运行可以在第一次park()方法的后边调用Thread.Interrupted()方法可以帮我们把打断状态改为false使程序调用park()方法时可以再次阻塞代码大致如下 public static void main(String[] args) throws InterruptedException {Thread thread new Thread() {Overridepublic void run() {LockSupport.park();System.out.printf(当前打断状态为%s\n,Thread.interrupted());LockSupport.park();System.out.println(dssdsds);}};thread.start();thread.interrupt();}