问题描述:
多线程打印20个偶数20个奇数为一组交替打印;
/**
* 多线程打印
* 先打印20个偶数在打印20个奇数依次循环交替
* @author dongfen
*
*/
public class EOdd {
public static void main(String[] args) {
Num1 num = new Num1(1000);
Thread edd = new Thread(new EddThread1(num));
edd.setName("edd");
edd.start();
Thread odd = new Thread(new OddThread1(num));
odd.setName("odd");
odd.start();
}
}
class Num1{
private static final ThreadLocal<Integer> threadLocal = new ThreadLocal<Integer>(){
@Override
protected Integer initialValue() {
// TODO Auto-generated method stub
return 0;
}
};
private int max;
public Num1(int max){
this.max = max;
}
public synchronized void printEdd(){
for(int i = 0; i< max;i+=2){
System.out.println(Thread.currentThread().getName() + " " + i);
threadLocal.set(threadLocal.get()+1);
if(threadLocal.get() % 20 == 0){
waitFor();
}
}
notifyAllThread();
}
private void notifyAllThread() {
try {
this.notifyAll();
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void waitFor() {
this.notifyAll();
try {
this.wait();
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public synchronized void printOdd(){
for(int i = 1; i< max;i+=2){
System.out.println(Thread.currentThread().getName() + " " + i);
threadLocal.set(threadLocal.get()+1);
if(threadLocal.get() % 20 == 0){
waitFor();
}
}
notifyAllThread();
}
}
class EddThread1 implements Runnable{
private Num1 num;
public EddThread1(Num1 num){
this.num = num;
}
public void run() {
this.num.printEdd();
}
}
class OddThread1 implements Runnable{
private Num1 num;
public OddThread1(Num1 num){
this.num = num;
}
public void run() {
this.num.printOdd();
}
}
参考资料地址:
Java 多线程 子线程 交替打印 奇偶数
分享到:
相关推荐
一个线程可以理解为一个人,打印字母可以理解为走路 张三走一步然后李四走一步。。。所有人走完第一步后,又从张三开始走下一步。 里面一共有4中实现方式,实现线程间同步和通信问题,有synchronized实现也有...
16:55:20.675 [main] INFO org.malin.allutils.makefile.ReadFileNameUtil - 获取到 文件名称: 10.并发调试和JDK8新特性.pdf 16:55:20.677 [main] INFO org.malin.allutils.makefile.ReadFileNameUtil - 获取到 ...
1. 实现一个类ThreadMock(模拟线程),用来模仿Thread类,该类具有以下特征: a) Public class ThreadMock implents ...例如第一个线程打印1,接着第二个线程打印100,接着第一个线程打印2。。。。。。。。依此类推。
C# 多线程互斥 两个线程交替工作 C#多线程互斥,两个线程交替工作,如上图所示,挺有意思的。
启动两个线程,一个线程打印1~52,另一个线程打印A~Z
一个简单的例子,C#多线程实现调用外部程序并获取打印结果 一个简单的例子,C#多线程实现调用外部程序并获取打印结果 一个简单的例子,C#多线程实现调用外部程序并获取打印结果 一个简单的例子,C#多线程实现调用...
java多线程按需交替执行,java新特性。
C#多线程打印任意范围的数字,使用autoresetevent线程排序打印,源码,经过本人实际测试,可直接运行。
c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程...
多线程下mysql连接数过多解决demo
模拟了一个16个摄像机的场景,有不开多线程和打开多线程的对比。 可以明显感觉到打开多线程后主界面不卡了。 只是个多线程的小例子,还有很多不足之处,有待各位完善。 注意:pro文件中的include和lib文件目录需要...
主要介绍了Java多线程通信:交替打印ABAB实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
1.使用三种VC的多线程同步方法编写一个多线程的程序(要求在屏幕上先显示Hello,再显示World)。 1)基于全局变量的多线程同步程序; 2)基于事件的多线程同步程序; 3)基于临界区的多线程同步程序。
多个线程交替执行输出各自的符号,本工程为方便支持26个线程,可循环 执行很多次.... 事件event + 临界区CriticalSection实现+标识量 事件event + 临界区CriticalSection实现 信号量Semaphore + 临界区Critical...
1.该工程为maven构建,要有maven环境 2.支持异步打印 3.支持多线程打印
Qt案例之利用QThread类实现简单多线程案例循环打印数字,可参考文章:https://blog.csdn.net/didi_ya/article/details/122661092
C#多线程互斥实例 多线程获取同一变量(不重复)。是一个很好的学习例子
C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例),可直接运行
易语言多线程多次启动一个子程序源码,多线程多次启动一个子程序,循环
编写一个可以从 1 到 n 输出代表这个数字的字符串的程序,但是: 如果这个数字可以被 3 整除,输出 “fizz”。 如果这个数字可以被 5 整除,输出 “buzz”。 如果这个数字可以同时被 3 和 5 整除,输出 “fizzbuzz...