美文网首页
[Java]多线程

[Java]多线程

作者: 芒果奶油卷 | 来源:发表于2019-10-11 17:32 被阅读0次

    #### 10.多线程

    ①理解程序、进程、线程的概念

    程序可以理解为静态的代码

    进程可以理解为执行中的程序

    线程可以理解为进程的进一步细分,程序的一条执行路径

    ②创建java程序的线程

    方式一:继承于Thread类

    方式二:实现Runnable接口

    ③两种方式的对比:联系:class Thread implements Runnable

    比较哪个好?实现的方式较好。

    ①解决了单继承的局限性。

    ②如果多个线程有共享数据的话,建议使用实现方式,同时,共享

    数据所在的类可以作为Runnable接口的实现类。

    ④线程里的常用方法:

    start() run() currentThread() getName() setName(String name) yield() join() sleep()

    isAlive() getPriority() setPriority(int i) wait() notify() notifyAll()

    ⑤线程的生命周期

    新建---(start)---就绪-----(获取CPU/失去CPU执行权)运行-----(正常执行结束;Error/Exception未处理;stop)死亡

    运行-----(sleep;等待同步锁;wait/join;suspend,即挂起)---阻塞

    阻塞-----(sleep时间到;获取同步锁;notify/notifyAll;resume,即释放)----就绪

    ⑥线程同步

    1.存在原因:

    由于一个线程在操作共享数据时,未执行完毕的情况下,了另外的线程参与进来,导致共享数据存在了安全问题

    2.解决办法

    必须让一个线程操作共享数据完毕后,其他线程才有机会参与共享数据的操作

    3.JAVA实现线程安全------线程同步

    方式1:同步代码块

    synchronized(同步监视器){

    //需要被同步的代码块

    }

    1.共享数据:多个线程共同操作一个数据

    2.同步监视器:由一个类的对象来充当,哪个线程获取此监视器,谁流执行被同步的代码块,

    俗称,锁(任何类的对象都可充当该锁)。但是该锁在多线程中必须唯一.

    在一般方法内,可以使用this;在静态方法内,使用当前类本身充当锁

    方式2:同步方法

    将共享数据的方法声明为synchronized,即此方法为同步方法,能够保证当一个线程执行此方法时,其他线程在外等待,直至次线程完成方法

    ⑦线程的通信

    wait;notify;notifyAll 这三者只有在synchronized方法或代码块中使用,否则出现java.lang.IllegalMonitorStateException

    wait():当在同步中,执行到此方法,则此线程“等待”,直至其他线程执行notify()的方法,将其唤醒,唤醒后继续其wait()后的代码

    notify()/notifyAll():在同步中,执行到此方法,则唤醒其他的某一个或所有的被wait的线程。

    相关文章

      网友评论

          本文标题:[Java]多线程

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