上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 26 下一页
摘要: 程序启动一个新线程成本是比较高的,因为它涉及到要与操作系统进行交互。 而使用线程池可以很好的提高性能,尤其是当程序中要创建大量生存期很短的线程时,更应该考虑使用线程池。 线程池里的每一个线程代码结束后,并不会死亡,而是再次回到线程池中成为空闲状态,等待下一个对象来使用。 在JDK5之前,我们必须手动 阅读全文
posted @ 2016-10-11 21:00 卡拉瓦 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 在之前,是把生产者录入数据和消费者获取数据的所有代码都分别写在各自的类中。 这样不大好 这次把生产者和消费者部分关键代码都写入资源类中: 然后再改变生产类和消费类的代码: 生产类: 消费类: 测试类不变: 阅读全文
posted @ 2016-10-11 17:46 卡拉瓦 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 线程的状态转换图解:图片 线程的线程组: 线程组: 把多个线程组合到一起。 它可以对一批线程进行分类管理,Java允许程序直接对线程组进行控制。 首先创建一个Runnable的实现类 先看看默认状态下,线程都会保存在哪个线程组中 由上面可知道,线程默认情况下属于main线程组 我们再让线程添加到自定 阅读全文
posted @ 2016-10-11 17:39 卡拉瓦 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 先来一张图,看看什么叫做等待唤醒机制 接上一章的例子。 例子:学生信息的录入和获取 * 资源类:Student * 设置学生数据:SetThread(生产者) * 获取学生数据:GetThread(消费者) * 测试类:StudentDemo * 资源类:Student (为了使用等待唤醒机制,添加 阅读全文
posted @ 2016-10-10 22:55 卡拉瓦 阅读(242) 评论(0) 推荐(0) 编辑
摘要: 生产者和消费者问题的描述图 通过上图,我们可以发现: 生产者和消费者使用的都是同一个资源(肉包子) 所以,当使用线程的时候,这两类的锁也是同一把锁(为了避免出现线程安全问题) 例子:学生信息的录入和获取 * 资源类:Student * 设置学生数据:SetThread(生产者) * 获取学生数据:G 阅读全文
posted @ 2016-10-10 21:46 卡拉瓦 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 同步的弊端: A:效率低 B:容易产生死锁 死锁: 两个或两个以上的线程在争夺资源的过程中,发生的一种相互等待的现象。 举例: 中国人,美国人一起吃饭。 正常情况: 中国人:筷子两支 美国人:刀和叉 死锁时: 中国人:筷子1支,刀一把 美国人:筷子1支,叉一把 首先创建一个死锁的类 程序执行的理想结 阅读全文
posted @ 2016-10-10 20:19 卡拉瓦 阅读(260) 评论(0) 推荐(0) 编辑
摘要: 在之前解决线程安全的过程中,虽然我们可以理解同步代码块和同步方法的锁对象问题, 但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁, 为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象Lock。 注意:Lock是个接口。 2个常用方法: void lock(): 获取锁。 void 阅读全文
posted @ 2016-10-10 18:32 卡拉瓦 阅读(957) 评论(0) 推荐(0) 编辑
摘要: 无内容。。等电脑 阅读全文
posted @ 2016-10-10 18:17 卡拉瓦 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 之前所学习到的线程安全的类: StringBuffer:线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。 Vector:Vector 类可以实现可增长的对象数组。 Hashtable:此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值 阅读全文
posted @ 2016-10-07 18:01 卡拉瓦 阅读(1315) 评论(0) 推荐(0) 编辑
摘要: 上一章说了,解决线程安全问题的实现方式1是使用同步代码块 同时也知道了,同步代码块的锁对象是任意对象:(Object obj ; Demo d;)这些都行 那么,现在来说解决线程安全问题的实现方式2 同步方法:(一个方法一进去就看到代码被同步了的情况下考虑使用) 把同步关键字synchronized 阅读全文
posted @ 2016-10-07 17:37 卡拉瓦 阅读(417) 评论(0) 推荐(0) 编辑
上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 26 下一页