线程术语

线程干扰:
当运行在不同线程中的两个操作对相同数据进行操作时,就会出现干扰,也就是说,两个操作有多个步骤组成,并且操作步骤的序列重叠了。


临界区:
当两个线程需要使用对一个对象时,存在交叉操作而破坏数据的可能性。这种潜在的干扰动作被称为临界区。通过同步对临界区的访问可以避免这种线程干扰。


Java提供了Synchronized关键字来支持内在锁。它可以放在方法的前面、对象的前面、类的前面。




同步方法:
public synchronized (void|type) methodName(paramters){}


同步语句:
synchronized(this){ statements; }


同步类:
把Synchronized关键字放在类的前面,这个类中的所有方法都是同步方法


死锁:
指在程序运行中,多个线程竞争共享资源时可能出现的一种系统状态,每个线程都被阻塞,都不会结束,进入一种永久等待状态


饿死:
一个线程不能获得对共享资源的常规常规访问,并且不能继续工作,当共享资源被贪婪线程长期占有而不可用时,就会发生这样的情况


活锁:
指线程不能进行进一步的操作,但是线程没有被锁定,它只是忙于相互响应,以致不能恢复工作。可以比喻为:两个人在走廊中相遇,A避让的自己的左边让B通过,而B同时避让到自己的右边让A通过。发现他们仍然挡住了对方,A就避让到自己的右边,而B同时避让到了自己的左边,他们还是挡住了对方,所以没完没了。




ThreadLocal:它不是一个Thread,而是Thread的局部变量。它为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其他线程所对应的副本。ThreadLocal和线程同步机制都是为了解决多线程中【相同变量】的访问冲突问题。


概括起来说,对于多线程资源共享的问题,同步机制采用了“以时间换空间”的方式,而ThreadLocal采用了以“空间换时间”的方式。前者仅提供一份变量,让不同的线程排队访问;后者为每一个线程都提供了一份变量,因此可以同时访问而不互相影响。



















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值