zoukankan      html  css  js  c++  java
  • Java第十天

    线程间通讯:

    多个线程在处理同一资源,但是任务却不同。

    多生产者,多消费者的问题:

    if判断标记,只有一次,会导致不该运行的线程运行了。出现了数据错误的情况。

    while判断标记,解决了线程获取执行权后,是否要运行。

    notify:只能唤醒一个线程,如果本方唤醒了本方,没有意义。而且while判断标记+notify会导致死锁。

    notifyAll解决了本方线程一定会唤醒对方线程的问题。

    同步代码块中,对于锁的操作是隐式的。

    jdk1.5以后将同步和封锁封装成了对象。并将操作锁的隐式方式定义到了该对象中,将隐式动作变成了显式动作。

    Lock接口:出现替代了同步代码块或者同步函数。将同步的隐式所操作变成现实锁操作。同时更为灵活。可以一个锁上加上多组监视器。

    lock():获取锁。

    unlock():释放锁,通常需要定义finally代码块中。

    Condition接口:出现替代了Object中的wait notufy notifyAll方法。将这些监视器方法单独进行封装,变成Condition监视器对象。可以任意锁进行组合。

    await();

    signal();

    signalAll();

    sleep和wait区别:

    1.wait可以指定时间也可以不指定,sleep必须指定时间。

    2.在同步中时,对cpu的执行权和锁的处理方式不同。

       wait:释放执行权,释放锁      sleep:释放执行权,不释放锁。

    停止线程:

    1.stop方法(已过时,该方法具有固有的不安全性) 

    2.run方法结束。

    任务中都会有循环结构,只要控制住循环就可以结束任务。

    控制循环通常就用定义标记

    使用interrupt(中断)方法

    该方法是结束线程的冻结状态,使线程回到运行状态中来。

    使用interrupt()方法将线程从冻结状态强制恢复到运行状态中来,让线程具备CPU的执行资格。但是强制动作会发生InterruptedException,记得要处理。

    setDaemon:后台线程,守护线程

    join:临时加入一个线程运算时可以使用join方法。

  • 相关阅读:
    学习动态性能表 第五篇V$SESSION
    学习动态性能表 第八篇V$LOCK
    学习动态性能表 第十九篇V$UNDOSTAT
    学习动态性能表 第四篇(1)V$SQLTEXT
    学习动态性能表 第十六篇V$ROWCACHE
    学习动态性能表 第十八篇V$SYSTEM_EVENT
    备份打开的数据库脚本
    学习动态性能表 第九篇V$FILESTAT
    学习动态性能表 第六篇(1)V$SESSION_WAIT
    学习动态性能表 第二十篇V$WAITSTAT
  • 原文地址:https://www.cnblogs.com/pushudepu/p/6049215.html
Copyright © 2011-2022 走看看