packagelocks;/***会被打乱的效果*/
public classLockTest2 {public static voidmain(String[] args) {newLockTest2().init();
}private voidinit() {//两个线程同时使用同一个Outputer对象,来确保他们使用的是同一把锁
final Outputer outputer = newOutputer();new Thread(newRunnable() {
@Overridepublic voidrun() {while (true) {try{
Thread.sleep(10);
}catch(InterruptedException e) {
e.printStackTrace();
}//启动一个线程 调用方法 打印如下代码
outputer.output("zhangxiaoxiang");
}
}
}).start();new Thread(newRunnable() {
@Overridepublic voidrun() {while (true) {try{
Thread.sleep(10);
}catch(InterruptedException e) {
e.printStackTrace();
}//在启动一个线程 调用方法 打印 如下代码
outputer.output("lileilei");
}
}
}).start();
}//两个线程调用方法的过程中,不能彼此干扰
classOutputer {public voidoutput(String name) {try{int len =name.length();for (int i = 0; i < len; i++) {
System.out.print(name.charAt(i));
}
System.out.println();
}catch(Exception e) {
e.printStackTrace();
}
}
}
}
//红色区域是发生打乱的效果//iaoxiang//zhangxiaoxiang//lileilei//zhangxiaoxialnig//leilei//lzihangxiaoxianlg//eilei//lilezhaniglxeii
//aoxiang
//zhangxiaoxianglileilei//
//zhangxiaoxiang//lileilei//lileilei//zhangxiaoxiang//lileilei//zhangxiaoxiang//zhlileilei//angxiaoxiang//lileilei//zhangxiaoxiang//zhangxiaoxiang//lileilei//zhangxiaoxiang//lileilei//zhangxiaoxiangli
//leilei//lileilei//zhangxiaoxiang//lileilei//zhangxiaoxiang//lileilei//zhangxiaoxiang//lileilei//zhangxiaoxiang//lileilei//zhangxiaoxiang//lileilei//zhangxiaoxiang//lileilei//zhangxiaoxiang//zhangxiaoxiang//lileilei//lileilei//zhangxiaoxiang//lileilei//zhangxiaoxiang//lileilei//zhangxiaoxiang//lileilei//zhangxiaoxiang//lileilei//zhangxiaoxiang//zhangxiaoxiang//lileilei//lileizhangxiaoxiang//lei//zhangxiaoxiang//lileilei//zhangxiaoxiang