美文网首页
2020-05-16 并发与多线程

2020-05-16 并发与多线程

作者: 奇妙林林 | 来源:发表于2020-05-18 22:20 被阅读0次

    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 并发与多线程

          本文链接:https://www.haomeiwen.com/subject/ipkrohtx.html