background image

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)