上一页 1 2 3 4 5 6 7 8 9 ··· 46 下一页
  2016年11月2日
摘要: Semaphore 是一个控制访问多个共享资源的计数器。 当一个线程想要访问某个共享资源,首先,它必须获得 semaphore。如果 semaphore 的内部计数器的值大于 0,那么 semaphore 减少计数器的值并允许访问共享的资源。计数器的值大于 0 表示,有可以自由使用的资源,所以线程可 阅读全文
posted @ 2016-11-02 14:33 huey2672 阅读(217) 评论(0) 推荐(0) 编辑
  2016年10月28日
摘要: 锁所提供的最重要的改进之一就是 ReadWriteLock 接口和它的实现类 ReentrantReadWriteLock。这个类提供两把锁,一把用于读操作和一把用于写操作。同一时间可以有多个线程执行读操作,但只有一个线程可以执行写操作。当一个线程正在执行一个写操作,不可能有任何线程执行读操作。 正 阅读全文
posted @ 2016-10-28 20:58 huey2672 阅读(169) 评论(0) 推荐(0) 编辑
  2016年10月27日
摘要: ReentrantLock 是可重入的互斥锁,它具有与使用 synchronized 方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大。 ReentrantLock 将由最近成功获得锁,并且还没有释放该锁的线程所拥有。当锁没有被另一个线程所拥有时,调用 lock 方法的线程将成功 阅读全文
posted @ 2016-10-27 15:51 huey2672 阅读(219) 评论(0) 推荐(0) 编辑
  2016年10月25日
摘要: Condition 将 Object 监视器方法(wait、notify 和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意 Lock 实现组合使用,为每个对象提供多个等待池(wait-set)。其中,Lock 替代了 synchronized 方法和语句的使用,Conditio 阅读全文
posted @ 2016-10-25 13:45 huey2672 阅读(206) 评论(0) 推荐(0) 编辑
  2016年10月24日
摘要: Lock 是 Java API 提供的另一种线程同步机制,它提供了比 synchronized 关键字更为灵活、强大的锁定操作。 锁是控制多个线程对共享资源进行访问的工具。通常,锁提供了对共享资源的独占访问,一次只允许一个线程获得锁,对共享资源的所有访问都需要先获得锁。不过,某些锁可能允许对共享资源 阅读全文
posted @ 2016-10-24 17:36 huey2672 阅读(217) 评论(0) 推荐(0) 编辑
  2016年10月19日
摘要: 生产者消费者问题是一个常见的多线程同步案例:一组生产者线程和一组消费者线程共享一个初始状态为空、大小为 N 的缓冲区。只有当缓冲区没满的时候,生产者才能把消息放入缓冲区,否则必须等待;只有缓冲区不空的时候,消费者才能从缓冲区取消息,否则必须等待。由于缓冲区是临界资源,在同一时间,它只允许一个生产者放 阅读全文
posted @ 2016-10-19 10:43 huey2672 阅读(367) 评论(0) 推荐(0) 编辑
  2016年10月17日
摘要: 共享数据是多线程应用最常见的问题之一,但有时我们需要为每个线程保存一份独立的变量。Java API 提供了 ThreadLocal 来解决这个问题。 一个 ThreadLocal 作用的例子: 观察运行结果: Thread1, GET dateVar: Fri Oct 14 22:06:33 CST 阅读全文
posted @ 2016-10-17 10:29 huey2672 阅读(231) 评论(0) 推荐(0) 编辑
  2016年10月9日
摘要: 当有多个线程竞争共享资源时,对资源的访问顺序敏感,则可能造成数据不一致。为了保证共享资源不被多个线程同时访问,则需要将竞争共享资源的代码置于临界区,临界区保证在同一时间内最多只能有一个线程执行该代码段。 先看一段由竞争共享资源造成数据不一致的代码: 运行结果: Huey 和 Jane 两个线程同时向 阅读全文
posted @ 2016-10-09 16:01 huey2672 阅读(211) 评论(0) 推荐(0) 编辑
  2016年9月28日
摘要: 当需要创建多个类似的线程实例时,使用工厂模式替代 new 操作符创建线程,能使代码更为简洁,易于维护。JDK 提供了 java.util.concurrent.ThreadFactory 接口,ThreadFactory 只有一个方法 newThread,它接收一个 Runnable 参数,返回一个 阅读全文
posted @ 2016-09-28 16:45 huey2672 阅读(271) 评论(0) 推荐(0) 编辑
  2016年9月24日
摘要: 创建线程 在 Java 中,创建线程有两种方式: 继承 java.lang.Thread 类,重写 run 方法。 public class MyJob extends Thread { @Override public void run() { System.out.println("Hello 阅读全文
posted @ 2016-09-24 16:55 huey2672 阅读(269) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 ··· 46 下一页