编写程序,要求子线程循环10次,接着主线程循环100次,接着又回到子线程循环10次,接着再回到主线程循环100次,如此循环50次
public class Test02 {
public static void main(String[] args) {
//1.创建业务对象: 包含子线程去执行的方法(10次),包含主线程去执行的方法(100次)
//2.创建对应的子线程:执行业务对象中的子线程方法
//3.创建对应的主线程:执行业务对象中的主线程的方法
//4.运行线程
ServiceObject serviceObject = new ServiceObject();
Thread sub = new Thread(new SubRunnable(serviceObject));
sub.start();
Thread main = new Thread(new MainRunnable(serviceObject));
main.start();
}
}
class ServiceObject {
private boolean falg = true; //表示执行子线程
/**
* 每次循环10次
*
* @param num :表示循环的总次数
*/
public synchronized void sub(int num) { //同步方法监听的对象 当前的this
if (!falg) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for (int i = 1; i <= 10; i++) {
System.out.println("子线程的总【" + num + "】,本次循位置:" + i);
}
falg = false; //表示main主线程执行
this.notifyAll();
}
/**
* 每次循环100次
*
* @param num :表示循环的总次数
*/
public synchronized void main(int num) {
if (falg) { //true应该是子线程执行
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for (int i = 1; i <= 100; i++) {
System.out.println("\t\t\t\t主线程的总【" + num + "】,本次循位置:" + i);
}
falg = true; //表示main主线程执行
this.notifyAll();
}
}
/**
* 子线程
*/
class SubRunnable implements Runnable {
private ServiceObject serviceObject;
public SubRunnable(ServiceObject serviceObject) {
this.serviceObject = serviceObject;
}
@Override
public void run() {
for (int i = 1; i <= 50; i++) {
serviceObject.sub(i);
}
}
}
/**
* 主线程
*/
class MainRunnable implements Runnable {
private ServiceObject serviceObject;
public MainRunnable(ServiceObject serviceObject) {
this.serviceObject = serviceObject;
}
@Override
public void run() {
for (int i = 1; i <= 50; i++) {
serviceObject.main(i);
}
}
}