多线程互斥问题在生活中随处可见,如买票、银行转账等等。。。
实例代码:
public class ThreadTest2 {
final SysOut sysOut=new SysOut();
public static void main(String[] args) {
ThreadTest2 test=new ThreadTest2();
new Thread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
try {
Thread.sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
test.sysOut.outer("****************");
}
}
}).start();
new Thread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
try {
Thread.sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
test.sysOut.outer("!!!!!!!!!!!!!!!!");
}
}
}).start();
}
class SysOut{
public void outer(String name){
for(int i=0,n=name.length();i<n;i++){
System.out.print(name.charAt(i));
}
System.out.println();
}
}
}
输入结果:
如果希望两个字符串都可以完整输出可以使用以下几种方法
1、使用synchronized块
class SysOut{
public void outer(String name){
synchronized(this){
for(int i=0,n=name.length();i<n;i++){
System.out.print(name.charAt(i));
}
System.out.println();
}
}
}
2、在方法上添加synchironized关键字
public synchronized void outer(String name){
for(int i=0,n=name.length();i<n;i++){
System.out.print(name.charAt(i));
}
System.out.println();
}
要想使多线程之间互斥,多线程之间必须使用相同的监视对象