c语言sscanf函数的用法是什么
254
2022-09-22
多线程的join()方法
线程的合并指的是:将指定的线程加入到当前的线程之中,可以将两个交替执行的线程合并为顺序执行的线程,如果在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。
public class JoinThread { public static void main(String[] args) { //线程的合并 /* * 把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。 * 比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。 * 比如在下面的例子中在20之前两个线程交替执行,但是当join()后一直在执行加入的线程, * 直到加入的线程完毕再继续执行其他的线程 */ Join j = new Join(); j.setName("分线程"); j.start(); for (int i = 0; i < 50; i++) { if(i == 20){ try { j.join();//当主线程执行到20时,强行将Join线程合并,等Join线程执行完毕,再执行剩下的数字 } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(Thread.currentThread().getName() + ":" + i); } }}class Join extends Thread{ @Override public void run() { for (int i = 0; i < 50; i++) { System.out.println(Thread.currentThread().getName() + ":" + i); } }}
输出的结果:
分线程:0分线程:1分线程:2分线程:3分线程:4分线程:5分线程:6分线程:7分线程:8分线程:9分线程:10分线程:11分线程:12分线程:13分线程:14分线程:15分线程:16main:0分线程:17分线程:18分线程:19分线程:20分线程:21分线程:22分线程:23分线程:24分线程:25分线程:26分线程:27分线程:28分线程:29分线程:30分线程:31分线程:32分线程:33分线程:34分线程:35分线程:36分线程:37分线程:38分线程:39分线程:40分线程:41分线程:42分线程:43分线程:44分线程:45分线程:46分线程:47分线程:48分线程:49main:1main:2main:3main:4main:5main:6main:7main:8main:9main:10main:11main:12main:13main:14main:15main:16main:17main:18main:19main:20main:21main:22main:23main:24main:25main:26main:27main:28main:29main:30main:31main:32main:33main:34main:35main:36main:37main:38main:39main:40main:41main:42main:43main:44main:45main:46main:47main:48main:49
源码中的解释:
/** * Waits at most {@code millis} milliseconds for this thread to * die. A timeout of {@code 0} means to wait forever.注意看这句话,它说的意思就是加入的线程死亡后才继续执行否则,永远等待 * *
This implementation uses a loop of {@code this.wait} calls * conditioned on {@code this.isAlive}. As a thread terminates the * {@code this.notifyAll} method is invoked. It is recommended that * applications not use {@code wait}, {@code notify}, or * {@code notifyAll} on {@code Thread} instances. * * @param millis * the time to wait in milliseconds * * @throws IllegalArgumentException * if the value of {@code millis} is negative * * @throws InterruptedException * if any thread has interrupted the current thread. The * interrupted status of the current thread is * cleared when this exception is thrown. */ public final synchronized void join(long millis) throws InterruptedException { long base = System.currentTimeMillis(); long now = 0; if (millis < 0) { throw new IllegalArgumentException("timeout value is negative"); } if (millis == 0) { while (isAlive()) { wait(0); } } else { while (isAlive()) { long delay = millis - now; if (delay <= 0) { break; } wait(delay); now = System.currentTimeMillis() - base; } } }
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~