您的位置:首页 > 理论基础 > 计算机网络

[java网络编程]线程的互斥

2015-03-07 16:48 369 查看
线程互斥是指某一资源同时只允许一个访问者(程序调用)对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。

[引例]

package cn.sundroid.thread;

public class TestSynchronized {
public static void main(String[] args) {
new TestSynchronized().init();
}

private void init() {

final Printer printer = new Printer();
/**
*开启一个新线程
*/
new Thread(new Runnable() {
@Override

public void run() {
while(true){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
printer.print("sundroid");
}

}
}).start();
/**
*开启一个新线程
*/
new Thread(new Runnable() {

@Override
public void run() {
while(true){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
printer.print("lydon");
}

}

}).start();
}

private class Printer {
private   void print(String name) {
int len = name.length();
for (int i = 0; i < len; i++) {
System.out.print(name.charAt(i));
}
System.out.println();
}
}
}




修改方法



为什么?

synchronized代表这个方法或者代码块加锁,当前有一个线程正在调用这个方法或者代码块时都必须得等当前线程将该方法或代码块调用完成后,其它等待调用的线程才可以开始调用。

不加synchronized时print方法正在输出“lydon”,这个时候程序直接开始输出“sundroid”,自然会出现“lydonsund”这样类似我们不想看到的结果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: