java多线程之间互斥的一种方式是使用sychronized来修改被多线程访问的代码;
而线程之间进行同步有序的进行时,可以使用wait(),notify()方法来实现
例如:子线程运行10次,主线程运行100次,子线程运行10次,主线程在运行100次,循环共50次。
package com.thread;
/**
* @Author madongxu
* @Date 2018-04-23
*
* 线程同步和互斥
*/
public class TraditionalSynchronizedDemo {
public static void main(String[] args) {
final Business business = new Business();
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
for(int i =1;i<=5;i++){
business.sub(i);
}
}
});
thread.start();
for(int j =1;j<=5;j++){
business.main(j);
}
}
static class Business{
//子线程先执行
boolean subShould = true;
public synchronized void sub(int i ){
while (!subShould){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//执行子线程逻辑
for (int a = 1; a < 10;a++){
System.out.println("sub thread run.."+a+"loop of"+i);
}
subShould=false;
this.notify();
}
public synchronized void main(int i){
while(subShould){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//执行住线程逻辑
for(int b = 1;b < 20;b++){
System.out.println("main thread run.."+b+" loop of "+i);
}
subShould=true;
this.notify();
}
}
}