Java多线程

作者: AlberLiu | 来源:发表于2018-02-01 16:46 被阅读0次

    1.Thread.yield 对线程调度一个建议,让出CPU

    2.shutdown()方法的调用可以防止新任务被提交给这个Executor

    3.可以返回结果的线程

    实现Callable接口的call()方法,ExecutorService调用submit()方法执行。返回一个Future对象。
    Future调用isDown()检查是否调用完。
    Future调用get()得到返回结果,若没有执行完,将一直阻塞。

    4.后台线程

    当所有非后台线程结束时,后台线程也就结束了。
    如果是设置线程池为后台线程,重写ThreadFactory接口,
    后台线程结束时不会调用finally方法,突然中止。

    5.捕获线程抛出的异常。

    实现Thread.UncaughtExceptionHandler接口的UncaughtExceptionHandler的方法。
    调用thread的setUncaughtExceptionHandler方法。

    6. synchronized 获取的锁,在方法抛出异常的时候会自动解锁

    7.使用Lock对象加锁。

    lock.lock;
    try{
    dosomething()
    } finallu{
    lock.unlock();
    }
    trylock(时间,时间单位)尝试去获取锁。

    8.原子类

    AtomicInteger AtomicLong AtomicReference

    9.调用wait

    线程执行被挂起,对象上的锁被释放

    10.只能在同步控制方法和同步控制块里调用wait(),notify(),notifyAll();如果在非同步块里调用,程序能通过编译,但运行的时候,将抛出异常。

    11.同步队列

    BlockingQuery LinkedBlockingQuery
    ArrayBlockingQuery

    12.interrupt

    如果一个线程已经被阻塞,或者执行一个阻塞的任务,那么设置的这个线程的中断状态将抛出InterruptedException。
    Interrupted可以用来检查中断状态。

    13. holdsLock()可以用来检查当前线程是否持有锁。

    14.await() signal()

    15.同步器

    CountDownLatch
    可以向CountDownLatch对象设置一个初始计数器,任何在这个对象上调用wait的方法都将被阻塞,直到这个计数器为0,
    其他任务在结束其工作时,可以调用该对象上的countDown来减少这个计数器。
    CountDownLatch只能被触发一次,计数器不能被重置。
    CyclicBarrier
    作用和CountDownLatch一样,计数器可以被重置。
    Exchanger
    用于两个线程之间交换数据,
    当你调用exchanger()方法时,他将阻塞直至对方任务调用exchanger()方法时。
    ScheduleExecutor
    定时操作

    相关文章

      网友评论

        本文标题:Java多线程

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