• java多线程的理解


    线程的5种状态:新建,就绪,运行,阻塞,死亡。

    Thread.sleep:线程  运行状态 转为  阻塞状态。

    Thread.yield:   线程 运行状态 转为 就绪状态。

    ThreadA.join:等待ThreadA执行完成。

    线程的两种方式:

    继承自Thread,实现Runnable.

    在线程中看是否有操作的同一对象的实例。如果有的话要考虑线程的同步和互斥。通俗点来说就是某个类的某个成员变量会有多个线程访问。

    线程的同步

    同步代码块:同步加锁的是对象,而不是代码。

    synchronized(Object A){

    }

    同步监视器是A,表示的是一个临界区。

    同步方法:

    synchronized Method1(){

    }

    synchronized Method2(){

    }

    同步锁:

    Lock lock = new ReentrantLock();

    public Mehtod1(){

    lock.lock();

    finally{

         lock.unlock();

    }

    }

    public Mehtod2(){

    lock.lock();

    finally{

         lock.unlock();

    }

    }

    同步监视器的释放:

    1.当前线程的同步方法或者同步代码块执行结束,当前线程即释放同步监视器。

    2.在同步方法或者同步代码块中出现了error或者exception的时候。

    3.当线程执行同步方法或者同步代码块时,程序执行了同步监视器对象的wait方法,则当前线程,并释放同步监视器。

    下面的情况不会释放同步监视器:

    1.当线程执行同步方法或者同步代码块时,程序调用Thread.Sleep,Thread.Yield方法。

    2.当线程执行同步方法或者同步代码块时,其他线程调用了该线程的suspend方法将该线程挂起。

    线程的通信:

    同步方法块或者同步方法使用object的wait,notify和notifyAll三个方法来进行线程的通信。

    如果是同步方法块synchronized(Object a):则在代码中要使用a.wait,a.notify,a.notifyAll;

    如果使用的是同步方法synchronized methodA(),则同步监视器是this对象,可以直接在代码中使用wait,notify和notifyAll方法。

    wait:导致当前的线程等待,并且释放当前的同步监视器。直到其他线程调用该同步监视器的notify方法和notifyall方法。

    notify:唤醒在此监视器上等待的单个线程,但是选择是任意的。

    notifyAll:唤醒在同步监视器上等待的所有线程。

  • 相关阅读:
    sqlmap注入分类
    sqlmap简单中文说明
    【Python Learning第一篇】Linux命令学习及Vim命令的使用
    模拟退火算法从原理到实战【基础篇】
    平面上给定n条线段,找出一个点,使这个点到这n条线段的距离和最小。
    使用VMWareWorkstation10搭建学习环境笔记
    洛谷P1313 计算系数【快速幂+dp】
    浅析Numpy.genfromtxt及File I/O讲解
    持续交付中高效率与高质量
    持续集成CI与自动化测试
  • 原文地址:https://www.cnblogs.com/lxzh/p/2859931.html
Copyright © 2020-2023  润新知