Java学习笔记整理-ThreadLocal

线程同步、线程异步

线程同步:

多个线程同时访问同一资源,等待资源访问结束,浪费时间、效率低

线程异步:

访问资源在空闲等待的同时访问其他资源,实现多线程

同步与异步的区别

同步最安全,异步容易导致死锁

实现线程安全

1.ThreadLocal:用空间换时间

	把公用的对象,给不同的线程创建了一个独立的副本,从而隔离了多个线程对数据访问的冲突,因为每一个线程都拥有自己的变量副本,从而也就没有必要对该变量进行同步了。ThreadLocal的使用 提供了线程安全的共享对象。
	为每一个线程都提供了一份变量,因此可以同时访问而互不影响
	方法:get()set(T value)

2.Synchronized:用时间换空间

synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时它还可以保证共享变量的可见性。
一.synchronized作用于实例方法
	1.一个对象只有一把锁,一个线程获取了该对象的锁之后,其他线程无法获得该锁对象的锁,就不能访问该对象其他synchronized实例方法,但是可以访问非synchronized
	2.其他线程来访问synchronized修饰的其他方法时需要等待线程1先把锁释放
	3.当其他线程来访问非synchronized修饰的方法时是可以访问的
	4.两个线程作用于不同的对象,获得的不同的锁,所以互相并不影响
二.synchronized作用于静态方法
	两个线程实例化两个不同的对象,但是访问的方法是静态的,两个线程发生了互斥,因为静态方法是依附于类而不是对象的,当synchronized修饰静态方法时,锁是class对象
三.synchronized作用于同步代码块
	如果当前有其他线程正持有该对象锁,那么新到的线程必须等待
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值