此处在线程初始化的时候赋给对应的值,在资源类中判断,如果轮到改线程执行,则执行,并且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();
}
}