共享数据

一些概念

java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致的更新,线程应该确保通过排他锁单独获得这个变量。

无状态对象

无状态对象是指一个类,既不包含任何域,也不包含任何对其他类中的域的引用。

无状态对象没有共享数据,一定是线程安全的。

共享数据 和 不共享数据

线程中的数据分类两种:共享数据 和 不共享数据。

  • 不共享数据:每个线程中,数据都属于当前线程,而不能被其他外部线程访问。这样的数据为不共享数据。
  • 共享数据:在多个线程中,可以访问到同一个变量,此时这个变量为多线程共享数据。多个线程间都可以访问修改。共享变量:如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线程的共享变量

如下代码,多个线程间访问同一个shareCount数据。shareCount数据是多个类共享变量。

public class ShareThread extends Thread {

    private int shareCount = 5;

    @Override
    public void run(){
        shareCount--;
        System.out.println("Thread Name:"+ this.currentThread().getName()
            + " ShareCount:"  + shareCount
        );
    }

    public static void main(String[] args) {
        Thread shareThread = new ShareThread();
        Thread v1 = new Thread(shareThread);
        Thread v2 = new Thread(shareThread);
        Thread v3 = new Thread(shareThread);
        Thread v4 = new Thread(shareThread);
        v1.start();
        v2.start();
        v3.start();
        v4.start();
    }
}
 posted on 2019-02-28 15:42  猛练自然强  阅读(304)  评论(0)    收藏  举报