摘要: 为什么要用线程池? 每次用线程的时候都去new一个,不麻烦么。如果线程用到较少可以。当需要大量用到线程时,频繁的创建线程,而且创建线程和销毁带来的开销也会随之增多。 线程池就像一个执行器。而我们需要执行的业务逻辑,在我们编写的实现了Runnable接口的run方法里面。 需要执行就扔到线程池里,我只 阅读全文
posted @ 2017-06-18 20:13 torjan 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 这是一个生产者和消费者的例子。消费者从仓库取物品,生产者向仓库增加商品。 当商品说达到最大时,不能继续增加商品,应该通知其他线程去取商品。 同样,当仓库商品为空时,无法取商品,而是通知其他线程增加商品。 这里用到线程的两个常用的方法:notifyAll和wait方法。 阅读全文
posted @ 2017-06-18 17:49 torjan 阅读(248) 评论(0) 推荐(0) 编辑
摘要: 说道多线程的安全问题,很多人想到就就是加锁。用到synchronized关键字。 那就要先说说synchronized问什么能够保证线程安全了。 首先要了解线程的工作方式:线程工作分为工作内存和主内存。主内存就是堆和静态区。当线程运行时,首先将主内存的数据拿到工作内存 然后在工作内存中运行,再将数据 阅读全文
posted @ 2017-06-18 16:57 torjan 阅读(867) 评论(0) 推荐(0) 编辑
摘要: 创建线程有两种方式:1.继承Thread类 2,实现Runnable接口 优缺点: 如果继承Thread,由于java不能多继承,所以无法继承别的类。当然有点就是有很多继承自Thread的方法,方便使用 实现Runnable接口很方便,而且可以继承别的类。缺点就是功能单一。 下面是一个简单的多线程实 阅读全文
posted @ 2017-06-18 15:02 torjan 阅读(157) 评论(0) 推荐(0) 编辑