多线程面试题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;
}
}
}
/**
* 子线程循环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;
}
}
}
相关文章推荐
- C++ 多线程 面试题详解
- 多线程面试题实践
- 秒杀多线程第一篇 多线程笔试面试题汇总
- 15个顶级Java多线程面试题及回答
- 多线程笔试面试题汇总
- 多线程面试题(一)
- 多线程并发库高级应用 之 使用java5中同步技术的3个面试题
- java-多线程-一道阿里面试题分析
- 多线程编程面试题1
- JAVA 多线程面试题
- JAVA面试题解惑系列(十)——话说多线程
- 1 那些年遇到过的面试题 - 40个多线程问题总结
- 多线程Demo-空中网面试题(张孝祥讲解)
- java基础——多线程——多线程面试题
- 多线程编程之三个面试题
- Java开发岗位面试题归类汇总六:多线程
- Java面试题-多线程
- 多线程常见的面试题
- java多线程面试题
- Java核心技术及面试指南 多线程并发部分的面试题总结以及答案