此处在线程初始化的时候赋给对应的值,在资源类中判断,如果轮到改线程执行,则执行,并且notifyAll,如果不是则阻塞,线程类只负责调用线程
源码如下
Resource.java
public class Resources {
public static int addNum=1;
public void method(int num){
synchronized (this){
for(int i=0;i<30;i++){
if(addNum%3==num){//如果轮到该线程
System.out.print(Thread.currentThread().getName());
this.notifyAll();
addNum++;
}else{
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
MyThread.java
public class MyThread extends Thread {
private Resources resources;
private int num;
public MyThread(Resources resources, int num){
this.resources=resources;
this.num=num;
}
@Override
public void run(){
resources.method(num);
}
}
Main.java
public class Main {
public static void main(String args[]){
Resources resources=new Resources();
MyThread threadA=new MyThread(resources,1);
MyThread threadB=new MyThread(resources,2);
MyThread threadC=new MyThread(resources,0);
threadA.setName("A");
threadB.setName("B");
threadC.setName("C");
threadA.start();
threadB.start();
threadC.start();
}
}
本文介绍了一个使用Java实现的多线程同步案例。通过一个资源类和三个线程类的交互,实现了不同线程间的有序执行。每个线程按指定顺序打印名称,展示了如何利用synchronized关键字和wait/notifyAll方法来协调线程执行顺序。
3519

被折叠的 条评论
为什么被折叠?



