多线程学习----线程范围内的共享数据(五)

线程范围内的共享变量举例:

创建三个线程,它们都访问了三个对象,第一个对象设置值,第二三个对象取值,同一个线程设置的值,只能被相同的线程获取,


public class ThreadScopeShareDataStudy {

	private static int data = 0;
	private static Map<Thread,Integer> dataMap = new HashMap<Thread,Integer>();
	public static void main(String[] args) {
		for(int i = 0;i<2;i++){
			new Thread(new Runnable() {
				@Override
				public void run() {
					int data = new Random().nextInt();
					System.out.println(Thread.currentThread().getName()+" push into data "+data);
					dataMap.put(Thread.currentThread(),data);
					new A().get();
					new B().get();
				}
			}).start();
		}
	}
	
	static class A{
		public void get(){
			int data = dataMap.get(Thread.currentThread());
			System.out.println("A from "+Thread.currentThread().getName()+" get data "+data);
		}
	}
	static class B{
		public void get(){
			int data = dataMap.get(Thread.currentThread());
			System.out.println("B from "+Thread.currentThread().getName()+" get data "+data);
		}
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
多线程更新数据时,需要注意数据的一致性和线程安全性。以下是一些常见的控制方法: 1. 使用锁:可以使用互斥锁(mutex)或信号量(semaphore)来控制对共享数据的访问。在每个线程访问共享数据之前,先获取锁,并在完成操作后释放锁。这样可以确保同一时间只有一个线程能够访问共享数据,避免并发冲突。 2. 使用条件变量:条件变量用于线程间的同步和通信,可以让线程等待某个条件满足后再继续执行。当一个线程修改了共享数据后,可以通过条件变量通知其他等待该条件的线程进行相应操作。 3. 使用原子操作:原子操作是不可中断的操作,可以保证对共享数据的操作在一个原子步骤内完成,不会被其他线程中断。在一些编程语言中,提供了原子操作的支持,如Java中的Atomic类。 4. 使用线程安全的数据结构:可以使用线程安全的数据结构来存储和更新数据,如线程安全的队列、哈希表等。这些数据结构内部实现了对并发访问的控制,可以减少手动处理并发问题的工作量。 5. 合理划分数据范围:如果多个线程需要更新不同部分的数据,可以将数据划分成多个片段,每个线程负责更新不同的片段。这样可以减小并发冲突的概率,提高并发性能。 需要根据具体情况选择合适的方法来控制多线程更新数据,确保数据的一致性和线程安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值