Java线程:线程的同步[Java编程]
本文“Java线程:线程的同步[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
1、同步问题提出
线程的同步是为了避免多个线程拜候一个数据对象时,对数据造成的破坏.
比方:两个线程ThreadA、ThreadB都操作同一个对象Foo对象,并改正Foo对 象上的数据.
public class Foo {
private int x = 100;
public int getX() {
return x;
}
public int fix(int y) {
x = x - y;
return x;
}
}
public class MyRunnable implements Runnable {
private Foo foo = new Foo();
public static void main(String[] args) {
MyRunnable r = new MyRunnable();
Thread ta = new Thread(r, "Thread-A");
Thread tb = new Thread(r, "Thread-B");
ta.start();
tb.start();
}
public void run() {
for (int i = 0; i < 3; i++) {
this.fix(30);
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread ().getName() + " : 当前foo对象的x值= " + foo.getX());
}
}
public int fix(int y) {
return foo.fix(y);
}
}
运行后果:Thread-A : 当前foo对象的x值= 40
Thread-B : 当前foo对象的x值= 40
Thread-B : 当前foo对象的x值= -20
Thread-A : 当前foo对象的x值= -50
Thread-A : 当前foo对象的x值= -80
Thread-B : 当前foo对象的x值= -80
Process finished with exit code 0
从后果发现,这样的输出值明显是不公道的.缘由是两个线程不加掌握的访 问Foo对象并改正其数据所致.
假如要保持后果的公道性,只需求到达一个目的,就是将对Foo的拜候加以限 制,每次只能有一个线程在拜候.这样就可以保证Foo对象中数据的公道性了.
在具体的Java代码中需求完成一下两个操作:
把竞争拜候的资源类Foo变量x标识为private;
同步哪些改正变量的代码,利用synchronized关键字同步办法或代码.
以上是“Java线程:线程的同步[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |