子线程运行10次,主线程运行100次,轮换运行50次
我第一遍写的
package com.xiaozhi.myInterClass;
public class Test5 {
/*
* 子线程运行10次,主线程运行100次,轮换运行50次
*/
public static void main(String[] args) {
boolean mark=true;
Object obj=new Object();
MyThread myThread=new MyThread(mark, obj);
myThread.start();
synchronized (obj) {
if(mark)
try {obj.wait();} catch (InterruptedException e) {e.printStackTrace();}
for(int i=0;i<50;i++)
{
// if(mark)
// try {obj.wait();} catch (InterruptedException e) {e.printStackTrace();}
for(int j=0;j<20;j++)
System.out.println("MainThread----------------------------i"+i+"---------------j"+j);
mark=true;
obj.notify();
try {obj.wait();} catch (InterruptedException e) {e.printStackTrace();}
}
}
}
}
class MyThread extends Thread{
private boolean mark;
private Object obj;
public MyThread(boolean mark, Object obj) {
super();
this.mark = mark;
this.obj = obj;
}
@Override
public void run() {
synchronized (obj) {
if(!mark)
try {obj.wait();} catch (InterruptedException e) {e.printStackTrace();}
for(int i=0;i<50;i++)
{
// if(!mark)
// try {obj.wait();} catch (InterruptedException e) {e.printStackTrace();}
for(int j=0;j<10;j++)
System.out.println("KidThread----------------i"+i+"---------------j"+j);
mark=false;
obj.notify();
try {obj.wait();} catch (InterruptedException e) {e.printStackTrace();}
}
}
}
}
第二遍
package com.xiaozhi.myInterClass;
public class Test6 {
/*
* 子线程运行10次,主线程运行100次,轮换运行50次
* 成员变量+内部类Runnable
*/
static boolean mark=true;
final static Object obj=new Object();
public static void main(String[] args) {
new Thread(){
public void run() {
synchronized (obj) {
if(!mark)
try {obj.wait();} catch (InterruptedException e) {e.printStackTrace();}
for(int i=0;i<50;i++)
{
while(!mark)
try {obj.wait();} catch (InterruptedException e) {e.printStackTrace();}
for(int j=0;j<10;j++)
System.out.println("KidThread----------------i