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方法。

  • 相关阅读:
    PAT 甲级 1027 Colors in Mars
    PAT 甲级 1026 Table Tennis(模拟)
    PAT 甲级 1025 PAT Ranking
    PAT 甲级 1024 Palindromic Number
    PAT 甲级 1023 Have Fun with Numbers
    PAT 甲级 1021 Deepest Root (并查集,树的遍历)
    Java实现 蓝桥杯VIP 算法训练 无权最长链
    Java实现 蓝桥杯VIP 算法训练 无权最长链
    Java实现 蓝桥杯 算法提高 抽卡游戏
    Java实现 蓝桥杯 算法提高 抽卡游戏
  • 原文地址:https://www.cnblogs.com/pushudepu/p/6049215.html
Copyright © 2011-2022 走看看