一、线程:
1.概念:指在程序执行过程中,能够执行程序代码的一个执行单位。(通俗概念:同一时刻运行多个程序的能力,每一个任务称为一个线程)
2.基本状态:
就绪、运行、synchronize阻塞、wait和sleep挂起、结束
3.使用线程:
(1)new thread()的run方法;
(2)new thread(runnable)调用runnable的run方法。
4.同步和异步:
简单说就是看调用之后会不会等待,等待就是同步,不等待就是异步。
同步:同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。需要等待,调用之后,没得到结果之前不返回结果。
异步:一旦开始,方法调用就会立即返回,调用者就可以继续后续的操作。异步方法通常会在另外一个线程中执行着,整个过程不会阻碍调用者的工作。不需要等待,调用之后直接返回了,所以没有返回结果。
PS:阻塞和非阻塞:
阻塞:专心等待结果。调用结果返回之前,当前线程直接被挂起。
非阻塞:等待过程中去干别的事情。在不能立刻得到结果之前,该调用不会阻塞当前的线程。
5.同步的几种实现方法:synchronize(同步锁),wait和notify
synchronize(同步锁)概念:解决的是多个线程之间访问资源的同步性。
例如:张三在银行账户存有1000元,李四和张三同时对这个账号在不同取款机多次的存取100,在这之后账户还有多少钱?
wait():使一个线程处于等待状态,并且释放所持有的对象的lock;
sleep():使一个正在运行的线程处于睡眠状态,需要捕捉InterruptedException(中断)异常。
以上两者的区别:wait是Object的方法,释放锁,在同步控制方法或者同步控制块中使用。sleep是thread的方法,不释放锁,任何地方可使用。
notify():唤醒一个处于等待状态的线程
Allnotify():唤醒所有处于等待状态的线程
6.run()和start():
run()是运行线程(即关联该线程所关联的执行代码),start()是启动线程。
7.synchronized(关键字)和Lock(接口)的区别:
Lock更精确,能完成synchronized所实现的所有功能;
Lock需要手工释放锁,synchronized自动释放锁。
8.死锁:
两个或两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象
stop()不安全,suspend()容易死锁。
浙公网安备 33010602011771号