`
tzylwl
  • 浏览: 90509 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

博客多线程

阅读更多
1、多线程6种状态
public enum State {

        //新建 
        NEW,
       //运行
        RUNNABLE,

        //阻塞
        BLOCKED,

        //等待
        WAITING,

        //延时等待
        TIMED_WAITING,

       //终止
        TERMINATED;
    }

2、wait/sleep区别:
   1、类不同:wait属于Object类;sleep属于Thread类
   2、会不会释放资源:wait会释放资源;sleep不会释放资源
   3、使用范围不同:wait必须跟notfialy一起使用;sleep是个独立的方法
   4、异常捕获不同:wait不需要捕获异常;sleep需要捕获异常

3、线程同步方式:1、Synchronizde关键字同步;2、Lock锁是一个对象
                 区别:Synchronizde会自动释放锁,Lock需要手动释放锁
                       Synchronizde一定是非公平锁,Lock可以是公平锁,通过参数设置
                       Synchronizde适用代码量较小的同步,Lock适用代码量较大的


4、List在多线程下是线程不安全:
    故障原因:ConcurrentModificationException   并发修改异常
    导致原因:add()方法没枷锁
    解决方案:1、List<String> list = new Vector<>(); 
              2、List<String> list = Collections.synchronizdeList(new ArrayList<>());
              3、List<String> list = new CopyOnWriteArrayList<>();
   
5、HashSet的底层源码是什么?  就是HashMap ;HashMap的底层数据是:链表+红黑树
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics