JAVA 线程:怎么解决资源共享冲突(上)
java 里如何去创建一个线程的问题,代码里创建的线程都是独立的,也就是说创建的线
程都不会相互的干扰,独立的进行属于自己的运算,更重要的是文章里创建的线程所使
用的资源都是独占式的,不会有人跟它争,但是实际对线程的应用中,更多的也是更难
的还是几个线程会抢夺同一个资源,比如火车的售票系统,碰到这样的问题就麻烦多了
由于这个问题比较复杂我把线程的基础篇中篇分为两篇文章来发布,今天是前篇。回到主
题吧,当 N 多的线程同时访问一个资源,并且 N 多的线程都有对这个资源修改和访问的
能力,解决资源冲突的技术就太重要了,记得我在研究前端优化技术的时候,脑海里浮
现最多的名词就是高并发,而对于网站在高并发下又能保证数据的准确性的问题,在我
知道 java 线程调度机制是随机切换时间片的时候,我就感到这个问题比想象中要复杂的
多。
为了便于阐述我要讲的主题,我想要写一个监控程序(Watcher),这个监控程序可
以随时检查我们调用的资源的内容比如数字,代码如下:
package cn.com.sxia;
public class AlwaysEven {
private int i;
public void next(){
i++;
i++;
}
public int getValue(){
return i;
}
public static void main(String[] args) {
final AlwaysEven ae = new AlwaysEven();
new Thread("Wacther"){
public void run(){
while(true){
int val = ae.getValue();
if (val % 2 == 0){
System.out.println(val);
System.exit(0);
}
}
}
}.start();
while(true)