上一页 1 ··· 14 15 16 17 18 19 20 21 22 ··· 46 下一页
  2019年6月13日
摘要: 1. 线程池 Java语言内置多线程支持: 创建线程需要操作系统资源(线程资源,栈空间) 频繁创建和销毁线程需要消耗大量时间 假设我们有大量的小任务,可以让它排队执行,然后在一个线程池里有少量的线程来执行大量的任务。 使用线程池来复用线程,可以非常高效的执行大量小任务。 线程池: 线程池维护若干个线 阅读全文
posted @ 2019-06-13 21:57 singleSpace 阅读(245) 评论(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 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 1. Concurrent 用ReentrantLock+Condition实现Blocking Queue。 Blocking Queue:当一个线程调用这个Queue的getTask()时,该方法内部可能让给线程变成等待状态,直到条件满足。线程被唤醒以后,getTask()才会返回。 而java 阅读全文
posted @ 2019-06-13 14:20 singleSpace 阅读(261) 评论(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 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 1.ReentrantLock的限制 ReentrantLock保证了只有一个线程可以执行临界区代码。 临界区代码:任何时候只有1个线程可以执行的代码块。 临界区指的是一个访问共用资源(例如:共用设备或是共用存储器)的程序片段,而这些共用资源又无法同时被多个线程访问的特性。当有线程进入临界区段时,其 阅读全文
posted @ 2019-06-12 20:32 singleSpace 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 1.java.util.concurrent 线程同步: 是因为多线程读写竞争资源需要同步 Java语言提供了synchronized/wait/notify来实现同步 编写多线程同步很困难 所以Java提供了更高级的java.util.concurrent包: 更高级的同步功能 简化多线程程序的编 阅读全文
posted @ 2019-06-12 00:06 singleSpace 阅读(201) 评论(0) 推荐(0) 编辑
  2019年6月11日
摘要: 1.多线程协调 synchronized解决了多线程竞争的问题,我们可以在synchronized块中安全的对一个变量进行修改,但是它没有解决多线程协调的问题。 例如设计一个TaskQueue,内部通过LinkedList()表示一个队列。addTask()将新任务放入队列,getTask()取出队 阅读全文
posted @ 2019-06-11 19:31 singleSpace 阅读(314) 评论(0) 推荐(0) 编辑
摘要: 在多线程编程中,要执行synchronized块,必须首先获得指定对象的锁。 1.Java的线程锁是可重入的锁 什么叫可重入的锁? 对同一个对象,同一个线程,可以多次获取它的锁,即同一把锁可以嵌套。 在add方法中,用synchronized获取了一个lock对象的锁,在synchronized代码 阅读全文
posted @ 2019-06-11 07:13 singleSpace 阅读(236) 评论(0) 推荐(0) 编辑
摘要: 1.对Java方法进行加锁 Java使用synchronized对一个对象进行加锁,也就可使用synchronized对一个方法进行加锁。 在执行synchronized语句时,我们首先获得synchronized指定的锁。当我们添加synchronized语句块的时候,首先需要注意的是锁住那个对象 阅读全文
posted @ 2019-06-11 02:45 singleSpace 阅读(214) 评论(0) 推荐(0) 编辑
  2019年6月10日
摘要: 1.线程安全问题 多个线程同时运行,线程调度由操作系统决定,程序本身无法决定。 如果多个线程同时读写共享变量,就可能出现问题。 假设有AddThread和DecThread,它们分别对同一个共享变量做加和减运算LOOP次,最终结果应该是0。但某些时候比如LOOP为10000时,结果是错误的。 jav 阅读全文
posted @ 2019-06-10 15:27 singleSpace 阅读(261) 评论(0) 推荐(0) 编辑
上一页 1 ··· 14 15 16 17 18 19 20 21 22 ··· 46 下一页