2020-05-16 并发与多线程

1.线程互斥(锁)我干完,你再来干

多个线程之间有共享资源(shared resource)时会出现互斥现象。

设有若干线程共享某个变量,而且都对共享变量有修改。如果它们之间不考虑相互协调工作,就会产生混乱。比如,线程A和B共用变量x,都对x执行增1操作。由于A和B没有协调,两线程对x的读取、修改和写入操作相互交叉,可能两个线程读取相同个x值,一个线程将修改后的x新值写入到x后,另一个线程也把自己对x修改后的新值写入到x。这样,x只记录最后一个线程的修改作用。

2.线程同步(wait、notify)我等你做完事,你再通知我做事

多线程之间除了有互斥情况外,还有线程同步。当线程A使用某个对象(共享变量),而此对象(共享变量)又需要线程B修改后才能符合本线程的需要,此时线程A就要等待线程B完成修改工作,这种线程的相互等待称为线程同步。

线程主要有八种状态,分别是new、runable、blocked、ready、running、waiting 、time_waiting、 terminated状态。

考试真题:

1.说说wait()和sleep()方法的区别:

    1.前者是object类的方法,后者是thread类的方法。

    2.前者不需要补货异常,sleep需要补货异常。

    3.wait方法会释放对象锁,sleep不会。

    4.wait需要在同步块中使用,sleep不需要。

2.检测死锁的方法:

 1.可以用Jconsole检测,连接好进程后,然后选择线程,然后检测,jconsole是jdk自带的具有图形化界面的检测死锁的工具。

2.可以使用Jstack工具,Jstack是JDK自带的命令行工具,主要用于线程Dump分析。

你可能感兴趣的:(2020-05-16 并发与多线程)