package JavaBasic;/**
* @Classname Synch
* @Description 对äºåæ¥ççè§£
* @Date 19-5-25 ä¸å1:57
* @Created by mao
*/
class Callme{
// synchronized void call(String msg){
void call(String msg){
System.out.print("["+msg);
try{
Thread.sleep(1000);
}catch (InterruptedException e){
System.out.println("Interrupted");
}
System.out.println("]");
}
//åè®¾è¿æ¯ç¬¬äºæ¹ç代ç ,ä¸è½ä½¿ç¨synchronizedå
³é®å修饰
}
class Caller implements Runnable{
String msg;
Callme target;
Thread t;
public Caller(Callme tar,String s){
target=tar;
msg=s;
t=new Thread(this);
t.start();
}
public void run(){
target.call(msg);
}
}
class Caller_2 implements Runnable{
String msg;
Callme target;
Thread t;
public Caller_2(Callme tar,String s){
target=tar;
msg=s;
t=new Thread(this);
t.start();
}
public void run(){
synchronized (target){
target.call(msg);
}
}
}
public class Synch {
public static void main(String[] args){
Callme target=new Callme();
//没æç»ç»ä¸ä¸ªçº¿ç¨åæ¶è°ç¨åä¸ä¸ªå¯¹è±¡çåä¸ä¸ªæ¹æ³,å¨callåé¢å ä¸synchronizedå
³é®å
Caller ob1=new Caller(target,"hello");
Caller ob2=new Caller(target,"synchronized");
Caller ob3=new Caller(target,"world");
try {
ob1.t.join();
ob2.t.join();
ob3.t.join();
}catch (InterruptedException e){
System.out.println("interrupted");
}
Caller_2 ob11=new Caller_2(target,"hello");
Caller_2 ob22=new Caller_2(target,"synchronized");
Caller_2 ob33=new Caller_2(target,"world");
try {
ob11.t.join();
ob22.t.join();
ob33.t.join();
}catch (InterruptedException e){
System.out.println("interrupted");
}
}
}