您的位置:首页 > 编程语言 > Java开发

java多线程:3、线程互斥

2017-04-09 13:42 239 查看
多线程互斥问题在生活中随处可见,如买票、银行转账等等。。。

实例代码:

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();
}


要想使多线程之间互斥,多线程之间必须使用相同的监视对象
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 多线程