Java编程实现多线程依次交替执行

2022-07-30,,,,

实现多线程依次交替执行,如两个线程交替输出100以内的整数:
线程1 : 1
线程2 : 2
线程1 : 3
线程2 : 4
线程1 : 5
线程2 : 6
……

class Number implements Runnable{ private int number = 1; private Object obj = new Object(); @Override public void run(){ while(true){ //一下出现一、二、三、四、五、六s synchronized(obj){ /*
            一、
			假设第一次进来的是线程1,拿到obj这个锁,线程第一次进来时,
			没有需要唤醒的线程,所以notify不起作用;
			三、此时线程2拿到obj这个锁进来了,发现线程1在等待,
			所以读到notify这个代码时唤醒了线程1,
			这时线程1和线程2继续向下运行;
			五、线程1又得到obj这个锁进来了,并notify唤醒了线程2,
			线程1和线程2继续向下运行……
			*/ obj.notify(); if (number <= 100){ try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + ":" +number); number++; try{ /*
                    二、
					线程1读到wait方法的时候就处于等待状态,不再向下运行,
					同时释放obj这个锁;
					四、当线程2也读到了wait方法时,变成了等待状态并释放了obj这个锁;
					六、当线程1又读到wait方法时释放obj锁并处于等待状态…… 
					*/ obj.wait(); }catch (InterruptedException e){ e.printStackTrace(); } }else{ break; } } } } } public class CommunicationTest { public static void main(String[] args){ Number number = new Number(); Thread t1 = new Thread(number); Thread t2 = new Thread(number); t1.setName("线程1"); t2.setName("线程2"); t1.start(); t2.start(); } } 控制台输出结果:
线程1:1 线程2:2 线程1:3 线程2:4 线程1:5 线程2:6 线程1:7 线程2:8 线程1:9 线程2:10 线程1:11 线程2:12 线程1:13 线程2:14 线程1:15 线程2:16 线程1:17 线程2:18 线程1:19 线程2:20 线程1:21 线程2:22 线程1:23 线程2:24 线程1:25 线程2:26 线程1:27 线程2:28 线程1:29 线程2:30 线程1:31 线程2:32 线程1:33 线程2:34 线程1:35 线程2:36 线程1:37 线程2:38 线程1:39 线程2:40 线程1:41 线程2:42 线程1:43 线程2:44 线程1:45 线程2:46 线程1:47 线程2:48 线程1:49 线程2:50 线程1:51 线程2:52 线程1:53 线程2:54 线程1:55 线程2:56 线程1:57 线程2:58 线程1:59 线程2:60 线程1:61 线程2:62 线程1:63 线程2:64 线程1:65 线程2:66 线程1:67 线程2:68 线程1:69 线程2:70 线程1:71 线程2:72 线程1:73 线程2:74 线程1:75 线程2:76 线程1:77 线程2:78 线程1:79 线程2:80 线程1:81 线程2:82 线程1:83 线程2:84 线程1:85 线程2:86 线程1:87 线程2:88 线程1:89 线程2:90 线程1:91 线程2:92 线程1:93 线程2:94 线程1:95 线程2:96 线程1:97 线程2:98 线程1:99 线程2:100 Process finished with exit code 0 

本文地址:https://blog.csdn.net/weixin_45802810/article/details/108042428

《Java编程实现多线程依次交替执行.doc》

下载本文的Word格式文档,以方便收藏与打印。