黑马程序员技术交流社区
标题:
子程序运行10次,运行主程序100次,子程序在运行10次,主程序在运行100次,来回往复50次
[打印本页]
作者:
ghhryr
时间:
2014-2-20 21:49
标题:
子程序运行10次,运行主程序100次,子程序在运行10次,主程序在运行100次,来回往复50次
package cn.darkhorse.exerrice;
/**
* 题目:子程序运行10次,运行主程序100次,子程序在运行10次,主程序在运行100次,来回往复50次
* */
public class TraditionalSynchronizedTest {
public static void main(String[] args) {
//实例化锁的对象
final Business b = new Business();
//子线程
new Thread(){
@Override
public void run(){
for(int i = 1;i <= 50 ; i++){
b.sub(i);
}
}
}.start();
//主线程
for(int i = 1;i <= 50 ; i++){
b.main(i);
}
}
}
/**
* 总结经验
* 1.实际的编程中,我们经常把一类操作共同资源的方法,放在同一个类中.
* 2.在多线程编程中,我们把锁的代码(操作共同资源的代码),提取出来成一个方法,并不放在多线程执行的代码中。
* 这样做使思路更加的清晰,更利于我们分析问题
*
*
* */
class Business{
private boolean sControl = true;
/**
* 一般编程时,用synchronized来控制同步锁
* 也就是在这里进行互斥操作
* 对同一个锁的对象持有和释放
* */
public synchronized void sub(int j){
while(sControl){//判断两次 比if多一次, 进入和出来的时候 提高安全性
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for(int i = 1;i<=10;i++){
System.out.println("sub execute of " + i + " count of " + j);
}
sControl = true;
this.notify();
}
public synchronized void main(int j){
while(!sControl){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for(int i = 1; i <= 100;i++){
System.out.println("main execute of " + i + " count of " + j);
}
sControl = false;
this.notify();
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2