保证线程安全以是否需要同步手段分类,分为同步方案和无需同步方案。如下:

1、互斥同步。

互斥同步是最常见的一种并发正确保障手段。同步是指在多线程并发访问共享数据时,保证共享数据在同一时刻只被一个线程使用(同一时刻,只有一个线程在操作共享数据)。而互斥是实现同步的一种手段,临界区、互斥量和信号量都是主要的互斥实现方式。因此,在这4个字里面,互斥是因,同步是果;互斥是方法,同步是目的。

2、非阻塞同步。

随着硬件指令集的发展,出现了基于冲突检测的乐观并发策略,通俗地说,就是先进行操作,如果没有其他线程争用共享数据,那操作就成功了;如果共享数据有争用,产生了冲突,那就再采用其他的补偿措施。(最常见的补偿错误就是不断地重试,直到成功为止),这种乐观的并发策略的许多实现都不需要把线程挂起,因此这种同步操作称为非阻塞同步。

3、无需同步方案。

要保证线程安全,并不是一定就要进行同步,两者没有因果关系。同步只是保证共享数据争用时的正确的手段,如果一个方法本来就不涉及共享数据,那它自然就无需任何同步操作去保证正确,因此会有一些代码天生就是线程安全的。

java如何实现两个线程之间共享数据?

方法/步骤

1.新建一个类:TestThreadShareData.java

2.声明一个内部类:StockReduce,implements自Runnable接口

3.声明一个静态变量stock,赋值20,代表库存量

4.重写run方法,当库存不为0时执行减库存操作

5.在main函数中,声明两个Thread对象,分别传入StockReduce减库存操作对象

6.thread1和thread2分别调用start方法启动线程

7.运行程序,可以看到两个减库存线程操作一份库存数据,实现了两个线程共享数据。备注:这里主题是探究如何实现多线程之间共享数据,所以没有考虑原子操作,加锁等问题,请参考代码时务必根据实际情况修改

标签: 线程安全 如何保证线程安全 两个线程之间共享数据 java如何实现两个线程之间共享数据