package java_learning;
public class synchronized_test {
public static void main(String[]args){
Callme target= new Callme();
Caller ob1 = new Caller(target,"hello");
Caller ob2 = new Caller(target,"wang");
Caller ob3 = new Caller(target,"riying");
//wait for thread to end
try{
ob1.m_t.join();
ob2.m_t.join();
ob3.m_t.join();
}catch(InterruptedException e){
System.out.println("interrupted");
}
}
}
class Callme{
void call(String msg){
/*synchronized 防止在一个线程使用call( )时其他线程进入call( )*/
//synchronized void call(String msg){
System.out.println("["+ msg);
try{
Thread.sleep(1000);//允许执行转换到另一个线程
}catch(InterruptedException e){
System.out.println("Interrupted");
}
System.out.println("]");
}
}
class Caller implements Runnable{
String m_msg;
Thread m_t;
Callme m_target;
public Caller(Callme targ,String str){
m_target = targ;
m_msg = str;
m_t = new Thread(this);
m_t.start();
}
@Override
public void run() {
// synchronize calls to call()
synchronized(m_target){
m_target.call(m_msg);
}
}
/*下面是synchronized语句的普通形式:
synchronized(object) {
// statements to be synchronized
}
*/
}
synchronized_test
最新推荐文章于 2021-05-21 16:25:12 发布