六种两个线程交替打印()方法(目前自我认知6种)

阅读: 评论:0

六种两个线程交替打印()方法(目前自我认知6种)

六种两个线程交替打印()方法(目前自我认知6种)

一:六种方法

题目:编写程序实现两个线程一个线程输出0、2、3…51,另外一个线程实现A...Z, a...z,(49x50y51z)

很多地方都可以见到类似的笔试题或者面试题,今天小辉以自己认知的范围内列举了如下6种方法,如果你们还有其他的方法留言给小辉,小辉立马学习改正。

1:使用synchronized & wait & notify

public static void useSynchronizedAndWaitAndNotify() {Object object = new Object();new Thread(() -> {synchronized (object) {for (int i = 0; i < 52; i++) {try {ify();System.out.print(i);object.wait();} catch (InterruptedException e) {e.printStackTrace();}}}}).start();new Thread(() -> {synchronized (object) {for (int i = 0; i < 52; i++) {try {char ch = getChar(i);ify();System.out.print(ch);object.wait();} catch (InterruptedException e) {e.printStackTrace();}}}}).start();}

2:使用LinkedTransferQueue

使用put和transfer都可以,put是异步的,transfer是阻塞的。

public static void useTransferQueue() {LinkedTransferQueue queue1 = new LinkedTransferQueue();LinkedTransferQueue queue2 = new LinkedTransferQueue();new Thread(() -> {for (int i = 0; i < 52; i++) {try {ansfer(i);
//                    queue1.put(i);System.out.print(queue2.take());} catch (Exception e) {e.printStackTrace();}}}).start();new Thread(() -> {for (int i = 0; i < 52; i++) {try {System.out.print(queue1.take());char ch = getChar(i);ansfer(ch);
//                    queue2.put(ch);} catch (Exception e) {e.printStackTrace();}}}).start();}

3:使用Lock & Condition

使用Lock锁和Condition条件,这种写法注意的是加锁后一定要解锁。使用这样的写法你写多个线程交替循环执行也很容易实现,业务代码放在signal和await前面,中间,后面有一些差别的哦。

public static void useLockAndCondition() {Lock lock = new ReentrantLock();Condition condition1 = wCondition();Condition condition2 = wCondition();new Thread(() -> {for (int i = 0; i < 52; i++) {lock.lock();try {System.out.print(i);condition2.signal();condition1.await();} catch (Exception e) {e.printStackTrace();

本文发布于:2024-02-02 20:36:24,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170687738546291.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:线程   六种   认知   自我   两个
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23