美文网首页
Java多线程拾遗

Java多线程拾遗

作者: RocWay | 来源:发表于2017-05-10 00:14 被阅读0次

1. 线程的状态

public enum Thread.State {
NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED;
}

2. yield vs wait

yield和sleep一样,调用之后线程转入RUNNABLE状态;而wait调用之后,线程则转入WAIT或TIMED_WAITING状态。
同样,yiled也没有让出锁,只是让出了此时的执行权。别的线程可以执行。
而wait则是让出了锁,只有别的线程调用了锁的notify之后,当前线程才会获得锁继续执行。

3. tryLock

某些锁,如ReentrantLock提供tryLock方法,其含义是如果没有线程持有该锁,则当前线程获得该锁;如果有线程已获得该锁,则当前线程立即返回。

4. Condition的实现

await时,将当前线程加入到等待队列中,并释放当前线程的锁,激活处在等待队列中的下一个线程。

5. Timer的缺陷以及替代品ScheduledThreadPoolExecutor

Timer在执行任务时只创建一个线程,如果该任务执行时间比较长,势必会影响下一个任务的执行。所以现在普遍用ScheduledThreadPoolExecutor来替代。

6. 方法的synchronized属性不可继承

父类方法设置了synchronized属性,子类override了这个方法,如果没有标明synchronized,那么子类的这个方法也不是同步的。

7. 捕获线程异常

针对某个线程:

Thread thread = new Thread(new Runnable(){
            @Override
            public void run()
            {
                int a=1/0;
            }
        });
        thread.setUncaughtExceptionHandler(new UncaughtExceptionHandler(){
            @Override
            public void uncaughtException(Thread t, Throwable e)
            {
                System.out.println("线程:"+t.getName()+" 出现了异常:"+e.getMessage());
            }
        });
        thread.start();

针对所有线程:

 Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler(){
            @Override
            public void uncaughtException(Thread t, Throwable e)
            {
                System.out.println("线程:"+t.getName()+" 出现了异常:"+e.getMessage());
            }
        });

8. Exchanger,线程间交换数据

一个线程调用exchange方法之后进入等待状态,直至另外一个线程也调用了exchange方法。

REF

相关文章

  • Java多线程拾遗

    1. 线程的状态 public enum Thread.State {NEW, RUNNABLE, BLOCKED...

  • 带你搞懂Java多线程(五)

    带你搞懂Java多线程(一)带你搞懂Java多线程(二)带你搞懂Java多线程(三)带你搞懂Java多线程(四) ...

  • 带你搞懂Java多线程(六)

    带你搞懂Java多线程(一)带你搞懂Java多线程(二)带你搞懂Java多线程(三)带你搞懂Java多线程(四)带...

  • Java多线程目录

    Java多线程目录 Java多线程1 线程基础Java多线程2 多个线程之间共享数据Java多线程3 原子性操作类...

  • java多线程--Callable

    **移步[java多线程系列文章]Java多线程(二十二)---LockSupport工具Java 停止线程 一、...

  • android 多线程 — 线程的面试题和答案

    这里都是我从各个地方找来的资料,鸣谢: Java多线程干货系列—(一)Java多线程基础 JAVA多线程和并发基础...

  • 5月份第一周学习安排

    学习内容: java多线程及线程同步的方法(使用) java多线程各种同步方法的原理和优缺点 java多线程设计模...

  • 带你搞懂Java多线程(四)

    带你搞懂Java多线程(一)带你搞懂Java多线程(二)带你搞懂Java多线程(三) 什么是线程间的协作 线程之间...

  • Java基础(六)

    多线程 Java多线程并发 1.1 JAVA 并发知识库 1.2 JAVA 线程实现/创建方式 1.2.1 继承 ...

  • (五) volatile关键字

    Java多线程目录 1 背景 理解Java多线程的内存抽象逻辑请阅读java多线程内存模型,当代操作系统,处理器为...

网友评论

      本文标题:Java多线程拾遗

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