多线程同步
{
public static void main(String[] args){
Num num = new Num();
Thread counter1 = new Counter(num);
Thread counter2 = new Counter(num);
for( int i=0; i<10; i++ ){
if(!num.testEquals()) break;
try{
Thread.sleep(100);
}catch(InterruptedException e){
}
}
}
}
{
private int x=0;
private int y=0;
void increase(){
x++;
y++;
}
boolean testEquals(){
boolean ok = (x==y);
System.out.println( x + "," + y +" :" + ok);
return ok;
}
}
{
private Num num;
Counter( Num num ){
this.num = num;
this.setDaemon(true);
this.setPriority(MIN_PRIORITY);
this.start();
}
public void run(){
while(true){
num.increase();
}
}
}
{
public static void main(String[] args){
Num num = new Num();
Thread counter1 = new Counter(num);
Thread counter2 = new Counter(num);
for( int i=0; i<10; i++ ){
num.testEquals();
try{
Thread.sleep(100);
}catch(InterruptedException e){
}
}
}
}
{
private int x=0;
private int y=0;
synchronized void increase(){
x++;
y++;
}
synchronized boolean testEquals(){
boolean ok = (x==y);
System.out.println( x + "," + y +" :" + ok);
return ok;
}
}
{
private Num num;
Counter( Num num ){
this.num = num;
this.setDaemon(true);
this.setPriority(MIN_PRIORITY);
this.start();
}
public void run(){
while(true){
num.increase();
}
}
}
{
int id;
public Worker(int id){ this.id=id; }
synchronized void doTaskWithCooperator(Worker other){
try{ Thread.sleep(500); } catch(Exception e){}
synchronized(other){
System.out.println("doing" + id);
}
}
}
public static void main(String[] args) {
Worker w1 = new Worker(1);
Worker w2 = new Worker(2);
Thread td1 = new Thread(()->{
w1.doTaskWithCooperator(w2);
});
Thread td2 = new Thread(()->{
w2.doTaskWithCooperator(w1);
});
td1.start();
td2.start();
}
}