zoukankan      html  css  js  c++  java
  • java多线程与锁相关

    线程五种状态:

    新建状态:首次创建线程,new Thread() 不具备其他任何状态

    就绪状态:执行start()进入就绪状态,线程已经启动,分配了cpu时间片,排队等待运行

    执行状态:获得cup资源 执行run(),没有意外直接执行到结束

    终止状态:当执行结束或调用stop() destory(),或被其他线程杀死,不能再进入就绪状态

    阻塞状态:由于某种原因,在执行状态中暂停执行,让出cpu

    sleep()进入睡眠 规定时间后自动苏醒回到就绪状态

    Wait()进入等待 需要notify(),notifyAll()回到就绪状态

    当被其他线程所阻塞,调用suspend()

    中断:

    java中断机制是一种协作机制通过一个线程去中断另一个线程(对该线程发出中断请求,该线程根据合适机会自己处理)

    线程方法:

    //线程让步

    //使线程进入暂停,让出cpu资源,直接进入就绪状态,而不是阻塞状态

    Thread.yield()

    //t.join()方法只会使主线程进入等待池并等待t线程执行完毕后才会被唤醒。并不影响同一时刻处在运行状态的其他线程。

    //比如t1.join(),必须等t1全部执行完,才能继续执行未就绪的线程,与他同时执行的不影响    

     public join()

    //线程设置优先级  MAX_PRIORITY =10  MIN_PRIORITY =1  NORM_PRIORITY =5

    t1.setPriority();

    Sychronized

    对代码块加锁:锁住的是任意对象,默认是this,(也就是说当新创建了第二个对象来访问不受限制)

    对普通方法加锁:锁住的是同一个对象,默认是this

    对静态方法加锁:锁住的是当前类的class对象,除了被锁住的静态方法受到限制,该类其余方法不受限制。

    Lock接口

    创建lock   Lock lock=new ReentrantLock();

    lock.lock();  

    解锁 lock.unlock();

    locksynchronized区别:

    1.synchronized是锁住方法体,代码块比较大的部分。Lock可以局部上锁解锁

    2.synchronizedjava的关键字,有jvm处理锁与解锁,不需要用户主动释放锁。LockJava类通过代码实现锁,需要主动释放,不释放容易出现死锁。

    3.synchronized不可中断。Lock可以中断。

    4synchronized是一种悲观锁。Lock是一种乐观锁

    5.synchronized是不公平锁。Lock默认非公平,根据传入的参数true为公平

    公平锁与非公平锁

    JavaFIFO的是公平锁。根据队列先后顺序,先申请的线程先获得锁

    非公平锁,可能出现插队情况

    可重入锁与不可重入锁

    以线程为单位,当一个线程获得对象锁之后,可再次获得该对象上的锁

    防止死锁

    可重入锁与不可重入锁对比,简单来说就是:可重入锁会多两个属性(1、获得该锁的线程;2、获得该锁的次数),根据第一个属性判断,如果是持有该锁的那个线程又来lock,不会被阻塞(wait),而是在上锁的次数加一(表示这个线程又锁了一次(重入)),只有该线程unlock的次数达到上锁的次数(即第二个属性等于0),才会唤醒其他线程。

    线程池

    一个装满Thread的容器,可重复使用线程。避免了频繁的创建新线程

    ExecutorService es = Executors.newFixedThreadPool(10); //创建线程数为10的线程池

  • 相关阅读:
    hibernate_0100_HelloWorld
    MYSQL子查询的五种形式
    JSF是什么?它与Struts是什么关系?
    nop指令的作用
    htmlparser实现从网页上抓取数据(收集)
    The Struts dispatcher cannot be found. This is usually caused by using Struts tags without the associated filter. Struts tags are only usable when the
    FCKeditor 在JSP上的完全安装
    Java遍历文件夹的2种方法
    充电电池和充电时间说明
    吃知了有什么好处
  • 原文地址:https://www.cnblogs.com/ttaall/p/11962874.html
Copyright © 2011-2022 走看看