package com.fish.thread;
publicclass Test22 {
publicstaticvoid main(String[] args) {
Inc inc=new Inc(0);
Dec dec=new Dec(1);
for(
int i=0;i<2;i++){
new Thread(inc).start();
new Thread(dec).start();
}
}
}
class Inc
implements Runnable{
int j=10;
Object mutex;
public Inc(Object mutex) {
this.mutex = mutex;
}
@Override
publicvoid run() {
//
TODO Auto-generated method stub
synchronized (mutex) {
for(int i=10;i>0;i--){
System.out.println(Thread.currentThread().getName()+"*******j="+j--);
}
}
}
}
class Dec
implements Runnable{
int j=10;
Object mutex;
public Dec(Object mutex) {
this.mutex = mutex;
}
@Override
publicvoid run() {
//
TODO Auto-generated method stub
synchronized (mutex) {
for(int i=10;i>0;i--){
System.out.println(Thread.currentThread().getName()+"&&&j="+j++);
}
}
}
}
Thread-0*******j=10
Thread-0*******j=9
Thread-0*******j=8
Thread-1&&&j=10
Thread-0*******j=7
Thread-1&&&j=11
Thread-0*******j=6
Thread-0*******j=5
Thread-0*******j=4
Thread-1&&&j=12
Thread-0*******j=3
Thread-1&&&j=13
Thread-0*******j=2
Thread-1&&&j=14
Thread-0*******j=1
Thread-1&&&j=15
Thread-1&&&j=16
Thread-2*******j=0
Thread-1&&&j=17
Thread-2*******j=-1
Thread-2*******j=-2
Thread-2*******j=-3
Thread-2*******j=-4
Thread-2*******j=-5
Thread-2*******j=-6
Thread-2*******j=-7
Thread-2*******j=-8
Thread-2*******j=-9
Thread-1&&&j=18
Thread-1&&&j=19
Thread-3&&&j=20
Thread-3&&&j=21
Thread-3&&&j=22
Thread-3&&&j=23
Thread-3&&&j=24
Thread-3&&&j=25
Thread-3&&&j=26
Thread-3&&&j=27
Thread-3&&&j=28
Thread-3&&&j=29
這個說明t0,t2是同步的,資源也是gx。這兩個為一組,另外兩個為另一組,兩組之間是非同步。
同步的標誌就是1一個執行,另一個必須等待。
用runnable的好處是可以實現資源資源共用。不是說thread不能是實現資源共用。只是runnable更好。