java go多线程:两个线程交替打印 0~100 的奇偶数
最近在实现raft算法,用到了很多go的高并发的知识,看到一道题写两个线程交替打印 1~100 的奇偶数
,突然来了兴趣。
题目要求我们要启动两个线程,一个打印奇数,一个打印偶数。中途不能跳出协程。
代码如下:
import ("fmt""time"
)type Tongbu struct {selectChannel chan int
}
var wg sync.WaitGroup
func main(){wg.Add(2)tong:=Tongbu{}tong.selectChannel=make(chan struct{})go tong.printOld()go tong.printEvent()wg.wait()}// 打印奇数
func (tong *Tongbu)printOld(){defer wg.Done()for i:=0;i<100;i++{// 阻塞当前协程tong.selectChannel<-struct{}if i%2==1{fmt.Printf("奇数%v\n",i)}}return}
// 打印偶数
func (tong *Tongbu)printEvent(){defer wg.Done()for i:=0;i<101;i++{<-tong.selectChannelif i%2==0{fmt.Printf("偶数%v\n",i)}}return
}
java 实现
Java 实现两个线程交替打印0~100 的奇偶数,主要通过上锁。是线程1打印之后唤醒其他线程,然后让出锁,自己进入休眠状态。因为进入了休眠状态就不会与其他线程抢锁,此时只有线程2在获取锁,所以线程2必然会拿到锁。线程2以同样的逻辑执行,唤醒线程1并让出自己持有的锁,自己进入休眠状态。这样来来回回,持续执行直到任务完成。就达到了两个线程交替获取锁的效果了。
private static int count=0;private static Object lock=new Object();public static void main(String[] args) {Thread odd = new Thread(() -> {while(count<=100){synchronized (lock){System.out.println(Thread.currentThread().getName()+":"+count++);lock.notifyAll();try {// 进行休眠,不争夺锁,等到另一个线程的唤醒if(count<=100)lock.wait();} catch (InterruptedException e) {e.printStackTrace();}}}}, "偶数");Thread even = new Thread(() -> {while(count<=100){synchronized (lock){System.out.println(Thread.currentThread().getName()+":"+count++);lock.notifyAll();try {// 没有if 判断语句就会,就会一个线程一直阻塞if(count<=100)lock.wait();} catch (InterruptedException e) {e.printStackTrace();}}}}, "奇数");odd.start();even.start();}
java go多线程:两个线程交替打印 0~100 的奇偶数相关推荐
- 线程打印_面试题:用程序实现两个线程交替打印 0~100 的奇偶数
作者:dadiyang来源:https://blog.csdn.net/dadiyang/article/details/88315124 面试场景 面试官:Java多线程了解吗?你给我写一下,起两个 ...
- Java常见的面试算法题:实现两个线程交替打印1到100的数
Java常见的面试算法题:实现两个线程交替打印1到100的数 思路: 这是涉及到多个线程打印的问题,一定会用到锁的(synchronized),故这就是一个多线程打印的典型案例. 代码实现: pack ...
- 使用Java线程并发库实现两个线程交替打印的线程题
背景:是这样的今天在地铁上浏览了以下网页,看到网上一朋友问了一个多线程的问题.晚上闲着没事就决定把它实现出来. 题目: 1.开启两个线程,一个线程打印A-Z,两一个线程打印1-52的数据. 2.实现交 ...
- Java两个线程交替打印奇偶数(两种方法对比)
简介 本文将承接文章<Java多线程wait()和notify()系列方法使用教程>,我们将通过"两个线程交替打印100内的奇偶数",来展示下wait()方法和noti ...
- java让两个线程交替_java两个线程实现: 两个线程交替打印字母和数
两个线程交替打印字母和数字: 1A2B3C4D5E6F7G public class LockConditionTest { public static void main(String[] args ...
- 如何让两个线程交替打印整数1-100?你的答案呢?
前端时间下班临走前看到同事做尝试的一个题目:如何让两个线程交替打印整数1-100? 好几年没有写代码玩了,想了想,花了十多分钟写了个答案: #include<stdio.h> #inclu ...
- 线程打印_经典面试题——两个线程交替打印奇数和偶数
前提 今天下班时候和同事聊天偶然听到面试题"两个线程交替打印奇数和偶数"的实现,这里做一个复盘. 复盘 场景一:线程A打印奇数,线程B打印偶数,线程A和线程B交替打印,使用对象监视 ...
- leet-code 两个线程交替打印FooBar
文章目录 一.题目 二.原理解析 三.完整代码 四.代码优化 五.Java版实现 一.题目 交替打印FooBar 两个不同的线程将会共用一个 FooBar 实例.其中一个线程将会调用foo()方法,另 ...
- c语言利用线程交替打印奇偶数,两个线程交替打印奇偶数
序言 以前看过多线程交替打印奇偶数,知道大概怎么写,实际写的时候会卡住,特此记录下来 方法一:wait, notify,性能较差,不推荐使用 public class TestThread { pub ...
最新文章
- python与anaconda区别_anaconda和python的区别是什么?
- Facebook数字货币凸显硅谷雄心:打造全球金融操作系统
- 一个Java程序员的阿里面试心得,附答案解析
- 派森编程软件python-零基础学习Python需要用什么开发工具?
- python 简单图像处理(8) 直方图均衡化
- Facebook 开启元宇宙模式!豪砸百亿是为什么?
- 运用js解决java selenium元素定位问题
- Keras——用Keras搭建RNN分类循环神经网络
- Ubuntu上面安装Mongo
- (6)数据结构-共享栈
- 大数据市场交易趋旺物联网平台争夺加剧
- android手机用Termux安装archlinux
- cruzer php sandisk 闪迪u盘量产工具_闪迪u3量产工具下载|
- 整数变百分数C语言,整数百分比
- indexof 的基本用法
- 视频倍速播放方法(有效!)
- 数据分析案例 |【01】电影数据分析
- 圣诞节礼物送什么有新意?高颜值蓝牙耳机可表心意
- uiautomatorviewer 简单使用
- 清明节出游图鉴:热门目的地的网络舆论与口碑分析