摘要: 转自: http://blog.csdn.net/ns_code/article/details/17200509 在集合API中,最初设计的Vector和Hashtable是多线程安全的。例如:对于Vector来说,用来添加和删除元素的方法是同步的。如果只有一个线程与Vector的实例交互,那么, 阅读全文
posted @ 2017-02-25 21:05 heimohe 阅读(372) 评论(0) 推荐(0) 编辑
摘要: 在并发编程中,多线程同时并发访问的资源叫做临界资源,当多个线程同时访问对象并要求操作相同资源时,分割了原子操作就有可能出现数据的不一致或数据不完整的情况,为避免这种情况的发生,我们会采取同步机制,以确保在某一时刻,方法内只允许有一个线程。 采用synchronized修饰符实现的同步机制叫做互斥锁机 阅读全文
posted @ 2017-02-25 21:00 heimohe 阅读(1442) 评论(0) 推荐(0) 编辑
摘要: (1)、定义: (2)、参数说明: RejectedExecutionHandler 添加任务失败后的执行策略,你可以调用线程池的 setRejectedExecutionHandler() 方法,用自定义的 RejectedExecutionHandler 对象替换现有的策略。 (3)、具体流程如 阅读全文
posted @ 2017-02-25 20:58 heimohe 阅读(308) 评论(0) 推荐(0) 编辑
摘要: 上图,不说话: 1、新建状态(New):新创建了一个线程对象。 2、就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。 3、运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。 阅读全文
posted @ 2017-02-25 20:43 heimohe 阅读(3493) 评论(0) 推荐(0) 编辑
摘要: volatile用处说明 首先明确一点: 假如有两个线程分别读写volatile变量时,线程A写入了某volatile变量,线程B在读取该volatile变量时,便能看到线程A对该volatile变量的写入操作,关键在这里,它不仅会看到对该volatile变量的写入操作,A线程在写volatile变 阅读全文
posted @ 2017-02-25 20:37 heimohe 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 守护线程 Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程) 用户线程即运行在前台的线程,而守护线程是运行在后台的线程。 守护线程作用是为其他前台线程的运行提供便利服务,而且仅在普通、非守护线程仍然运行时才需要,比如垃圾回收线程就是一个守护线程。当VM检 阅读全文
posted @ 2017-02-24 17:54 heimohe 阅读(2840) 评论(0) 推荐(0) 编辑
摘要: 挂起和恢复线程 Thread 的API中包含两个被淘汰的方法,它们用于临时挂起和重启某个线程,这些方法已经被淘汰,因为它们是不安全的,不稳定的。如果在不合适的时候挂起线程(比如,锁定共享资源时),此时便可能会发生死锁条件——其他线程在等待该线程释放锁,但该线程却被挂起了,便会发生死锁。另外,在长时间 阅读全文
posted @ 2017-02-24 17:47 heimohe 阅读(12214) 评论(0) 推荐(1) 编辑
摘要: 一、使用interrupt()中断线程 当一个线程运行时,另一个线程可以调用对应的Thread对象的interrupt()方法来中断它,该方法只是在目标线程中设置一个标志,表示它已经被中断,并立即返回。这里需要注意的是,如果只是单纯的调用interrupt()方法,线程并没有实际被中断,会继续往下执 阅读全文
posted @ 2017-02-24 16:50 heimohe 阅读(4743) 评论(0) 推荐(0) 编辑
摘要: 下面以典型的买票程序(基本都是以这个为例子)为例,来说明二者的区别。 首先通过继承Thread类实现,代码如下: 执行结果如下: 从结果中可以看出,每个线程单独卖了5张票,即独立地完成了买票的任务,但实际应用中,比如火车站售票,需要多个线程去共同完成任务,在本例中,即多个线程共同买5张票。 通过实现 阅读全文
posted @ 2017-02-24 15:26 heimohe 阅读(6119) 评论(2) 推荐(1) 编辑
摘要: 线程是一个动态执行的过程,它也有一个从产生到死亡的过程。 下图显示了一个线程完整的生命周期。 新建状态: 使用 new 关键字和 Thread 类或其子类建立一个线程对象后,该线程对象就处于新建状态。它保持这个状态直到程序 start() 这个线程。 就绪状态: 当线程对象调用了start()方法之 阅读全文
posted @ 2017-02-24 15:11 heimohe 阅读(690) 评论(0) 推荐(0) 编辑