问题:开启3个线程,这3个线程的ID分别为A.B.C,每个线程将自己的ID依次在屏幕上打印10次,要求输出结果必须按照ABC的顺序显示
- 方法一:
//ThreadName类public class ThreadName0511 {
private Integer index;
//当前执行线程IDpublic Integer getIndex() {
return index;
}public void setIndex(Integer index) {
this.index = index;
}
} //ThreadDemo类
public class ThreadDemo0511 extends Thread {
private ThreadName0511 threadName;
//线程间传递对象
private Integer number;
//当前线程编号//构造函数
public ThreadDemo0511(ThreadName0511 threadName,Integer number) {
this.threadName = threadName;
this.number = number;
}@Override
public void run() {
int i = 1;
while(i <= 10) {
synchronized (threadName){
//如果当前的线程编号不是所需要的线程编号,就调用wait()方法
while (number != threadName.getIndex()){
try{
threadName.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//否则就打印
System.out.print(Thread.currentThread().getName());
//下一个线程的编号
threadName.setIndex((number+1)%3);
threadName.notifyAll();
i++;
}
}
}
}//主函数
public class ThreadTest511 {
public static void main(String[] args) {
ThreadName0511 threadName = new ThreadName0511();
threadName.setIndex(0);
Thread T0 = new Thread(new ThreadDemo0511(threadName,0));
Thread T1 = new Thread(new ThreadDemo0511(threadName,1));
Thread T2 = new Thread(new ThreadDemo0511(threadName,2));
T0.setName("A");
T1.setName("B");
T2.setName("C");
T0.start();
T1.start();
T2.start();
}
}
【线程-----多线程循环打印ABC10次】打印结果:
文章图片
- 方法二:
public class TestABC {
private static int COUNT= 0;
public static void main(String[] args) {
Lock lock = new Lock();
Thread thread1 = new Thread(new Runnable(){
@Override
public void run() {
while(COUNT <= 30) {
try {
lock.lock();
if(COUNT %3==0) {
System.out.print("A");
COUNT ++;
}
lock.unlock();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
Thread thread2= new Thread(new Runnable(){
@Override
public void run() {
while(COUNT <= 30) {
try {
lock.lock();
if(COUNT%3==1) {
System.out.print("B");
COUNT++;
}
lock.unlock();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
Thread thread3 = new Thread(new Runnable(){
@Override
public void run() {
while(COUNT <= 30) {
try {
lock.lock();
if(COUNT%3==2) {
System.out.print("C");
COUNT++;
}
lock.unlock();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
thread1.start();
thread2.start();
thread3.start();
}
}
推荐阅读
- 总结|python爬虫入门
- 学习心得|Android 属性动画详解
- android 6.0系统应用内更新导致的解析包错误问题
- 原创|解决使用echarts做动态数据饼图展示中data如何传值的问题
- 自学|jdk1.8谷歌版本中文文档
- Java利用反射将list里的值赋到vo实体类里
- 原创|日期类型转字符串 oracle和java的区别
- 原创|centos7.2 安装和启动docker