上一页 1 ··· 14 15 16 17 18 19 20 21 22 ··· 47 下一页
  2019年6月13日
摘要: 1. Runnable接口的限制 JDK提供了ExecutorService接口表示线程池,可以通过submit提交一个任务。 但这里的task有个问题,因为继承制Runnable,如果希望返回一个结果,只能用result来表示,这样主线程获取结果,就很不方便。 因此JDK又提供了一个Callabl 阅读全文
posted @ 2019-06-13 22:37 singleSpace 阅读(281) 评论(0) 推荐(0)
摘要: 1. 线程池 Java语言内置多线程支持: 创建线程需要操作系统资源(线程资源,栈空间) 频繁创建和销毁线程需要消耗大量时间 假设我们有大量的小任务,可以让它排队执行,然后在一个线程池里有少量的线程来执行大量的任务。 使用线程池来复用线程,可以非常高效的执行大量小任务。 线程池: 线程池维护若干个线 阅读全文
posted @ 2019-06-13 21:57 singleSpace 阅读(321) 评论(0) 推荐(0)
摘要: 1. Atomic java.util.concurrent.atomic提供了一组原子类型操作。如AtomicInteger提供了 1.1 无锁线程安全 Atomic类可以实现无锁(lock free)的线程安全(thread safe)访问 原理:CAS(Compare and Set)如果At 阅读全文
posted @ 2019-06-13 19:01 singleSpace 阅读(195) 评论(0) 推荐(0)
摘要: 1. Concurrent 用ReentrantLock+Condition实现Blocking Queue。 Blocking Queue:当一个线程调用这个Queue的getTask()时,该方法内部可能让给线程变成等待状态,直到条件满足。线程被唤醒以后,getTask()才会返回。 而java 阅读全文
posted @ 2019-06-13 14:20 singleSpace 阅读(278) 评论(0) 推荐(0)
  2019年6月12日
摘要: 1.Condition实现等待和唤醒线程 java.util.locks.ReentrantLock用于替代synchronized加锁 但是synchronized可以使用wait和notify实现线程在条件不满足时的等待,条件满足时的唤醒。 如何使用ReentrantLock实现wait/not 阅读全文
posted @ 2019-06-12 22:21 singleSpace 阅读(212) 评论(0) 推荐(0)
摘要: 1.ReentrantLock的限制 ReentrantLock保证了只有一个线程可以执行临界区代码。 临界区代码:任何时候只有1个线程可以执行的代码块。 临界区指的是一个访问共用资源(例如:共用设备或是共用存储器)的程序片段,而这些共用资源又无法同时被多个线程访问的特性。当有线程进入临界区段时,其 阅读全文
posted @ 2019-06-12 20:32 singleSpace 阅读(237) 评论(0) 推荐(0)
摘要: 1.java.util.concurrent 线程同步: 是因为多线程读写竞争资源需要同步 Java语言提供了synchronized/wait/notify来实现同步 编写多线程同步很困难 所以Java提供了更高级的java.util.concurrent包: 更高级的同步功能 简化多线程程序的编 阅读全文
posted @ 2019-06-12 00:06 singleSpace 阅读(216) 评论(0) 推荐(0)
  2019年6月11日
摘要: 1.多线程协调 synchronized解决了多线程竞争的问题,我们可以在synchronized块中安全的对一个变量进行修改,但是它没有解决多线程协调的问题。 例如设计一个TaskQueue,内部通过LinkedList()表示一个队列。addTask()将新任务放入队列,getTask()取出队 阅读全文
posted @ 2019-06-11 19:31 singleSpace 阅读(341) 评论(0) 推荐(0)
摘要: 在多线程编程中,要执行synchronized块,必须首先获得指定对象的锁。 1.Java的线程锁是可重入的锁 什么叫可重入的锁? 对同一个对象,同一个线程,可以多次获取它的锁,即同一把锁可以嵌套。 在add方法中,用synchronized获取了一个lock对象的锁,在synchronized代码 阅读全文
posted @ 2019-06-11 07:13 singleSpace 阅读(250) 评论(0) 推荐(0)
摘要: 1.对Java方法进行加锁 Java使用synchronized对一个对象进行加锁,也就可使用synchronized对一个方法进行加锁。 在执行synchronized语句时,我们首先获得synchronized指定的锁。当我们添加synchronized语句块的时候,首先需要注意的是锁住那个对象 阅读全文
posted @ 2019-06-11 02:45 singleSpace 阅读(230) 评论(0) 推荐(0)
上一页 1 ··· 14 15 16 17 18 19 20 21 22 ··· 47 下一页