多线程
黑曼巴dengyanliang
时常保持一颗奋进的心!
展开
-
死锁
1、死锁产生的原因: a.系统资源不足 b.进程拿锁的顺序不当 c.资源分配不当2、死锁产生的四个条件 a.互斥条件:进程在某一时刻独占一个资源,反过来讲,就是一个资源在某一时间内只能被一个进程占有,不能被两个或两个以上的进程占有。 b.占有且申请条件:进程至少占有一个资源,但又申请新的资源,由于该资源已经被另外进程占有,此时该进程阻塞。但是,原创 2016-04-24 19:19:35 · 331 阅读 · 0 评论 -
Lock和synchronized的区别
在多线程,可以通过Lock和synchronized这两种情况进行加锁。现总结一下它们的区别:1、Lock是一个接口,而synchronized是java内置的一个关键字。2、在发生异常时,Lock不能主动释放锁,所以需要我们在finally中通过unlock()去主动释放锁;而synchronized可以主动的释放锁,因此不会发生死锁。3、Lock可以响应中断,而synchroniz原创 2016-04-27 21:14:50 · 595 阅读 · 0 评论 -
线程池的总结
1、在多线程中,线程池通过ThreadPoolExecutor的execute()方法来执行。执行步骤分为以下四步:1)如果当前运行的线程少于corePoolSize,则创建新线程来执行任务,在执行这个步骤时会获取全局锁。2)如果运行的线程等于或者大于corePoolSize,则将任务加入BlockingQueue。3)如果无法将任务加入BlockingQueue,即队列满的时候,则创原创 2016-04-27 21:47:49 · 358 阅读 · 0 评论 -
java内存模型
1、java内存模型的基础 在多线程编程中,线程之间的通信机制有两种:共享内存和消息传递。在共享内存的并发模型中,线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信;在消息传递的并发模型中,线程之间没有公共状态,线程之间必须通过消息进行显式通信。 java线程之间的通信通过java内存模型(简称JMM)控制。JMM定义了线程和主内存之间的抽象关系:线程之间的共享原创 2016-04-30 15:40:59 · 323 阅读 · 1 评论 -
浅析ThreadLocal
ThreadLocal不是Thread,而是Thread的局部变量。ThreadLocalMap是ThreadLocal类的一个静态内部类,它实现了键值对的设置和获取,每个线程中都有一个独立的ThreadLocalMap副本,它所存储的值,只能被当前线程读取和修改。ThreadLocal类通过操作每一个线程特有的ThreadLocal副本,从而实现了变量访问在不同线程中的隔离。因为每个线程的变原创 2016-04-11 21:32:32 · 440 阅读 · 0 评论