您的位置:首页 > 职场人生

多线程面试题1

2014-08-18 16:47 134 查看
package zhu.test;

/**

* 子线程循环10次,接着主线程循环100次,接着又回到子线程循环10次,主线程循环100次,依次交替循环

* 50次

*

* @author nn

*思想:

* 把互斥资源封装到一个类中

*/

public class LoopTest {

public static void main(String[] args) {//在外部类的静态方法中不能实例化非静态内部类

// final Test test= new Test();

new Thread(//使用构造函数的方法 初始化一个子线程

new Runnable() {

@Override

public void run() {

for(int i=1;i<51;i++)

{

Test.sub(i);

}

}

}

).start();

//主线程

for(int i=1;i<51;i++)

{

Test.main2(i);

}

}

static class Test{

static boolean isSubTrue=true;

synchronized static void main2(int num)

{

if(isSubTrue)//子线程是true 主线程等待 资源等待

{

try {

Test.class.wait();//等到 子线程 资源释放

} catch (InterruptedException e) {

e.printStackTrace();

}

}//子线程是false 可以执行主线程 执行完后释放 资源 并且修改isSubTrue为true

for(int i=1;i<101;i++)

System.out.println("main"+i+"第几次外循环:"+num);

Test.class.notify();

isSubTrue = true;

}

synchronized static void sub(int num)//同步标识是Test.class

{

if (!isSubTrue)

{

try {

Test.class.wait();

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

for(int i=1;i<11;i++)

System.out.println("sub"+i+"第几次外循环:"+num);

Test.class.notify();

isSubTrue = false;

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: