[新]创建子父线程,子线程优先执行3次,父线程执行5次,如此循环10次
根据上一次的代码修改在一个文件中亦可实现目标:
public class FAndS {
/**
* @param args
*/
public static void main(String[] args) {
final Util u = new Util();
//创建一个Thread对象,重写run方法,修改线程名,循环调用工具类中的方法
//熟练匿名对象的使用,熟练实例化方法的同时直接重写必要的方法,达到代码简洁
new Thread(){
public void run(){
this.setName("子-线-程");
for(int i = 0;i < 10; i++){
u.son(i);
}
}
}.start();
//main线程修改线程名
Thread.currentThread().setName("父-线-程");
//main线程循环调用工具类中的方法
for(int i = 0;i < 10; i++){
u.father(i);
}
}
}
class Util extends Thread{
//加入控制选项,实现进入父线程等待,子线程输出
private Boolean flag = true;
//加入synchronized锁
public synchronized void father(int j){
if(flag){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for(int i = 0;i < 3; i++){
System.out.println("线程"+Thread.currentThread().getName()+"执行第"+(i+1)+"次,第"+(j+1)+"次循环");
}
flag = true;
this.notify();
}
public synchronized void son(int j){
if(!flag){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for(int i = 0;i < 5; i++){
System.out.println("线程"+Thread.currentThread().getName()+"执行第"+(i+1)+"次,第"+(j+1)+"次循环");
}
flag = false;
this.notify();
}
}