随笔分类 - 多线程
java编程中的痛点和难点-----java多线程学习
摘要:死锁 死锁:等待形成一个循环 操作系统中经典问题: 哲学进餐问题 package Philosopher; public class Chopstick { private boolean taken = false; public synchronized void take() throws I
阅读全文
摘要:线程协作 正如以前所见的多线程同时运行多个任务时候,可以通过使用锁(互斥)来同步两个任务的行为。从而使得一个任务不会干涉另一个任务的资源 线程协作,现在的问题不是彼此干涉而是彼此之间的协调。当任务协调的时候,关键是这些任务之间的握手。为了实现握手我们使用了相同的基础特性:互斥。这种情况下,互斥确保了
阅读全文
摘要:线程状态: 线程可以处于下面的四种状态之一: 新建(NEW) 线程被创建成功之后会短暂处于这个状态。线程已分配了必需的系统资源。并执行了初始化。此时线程已经有资格获得cpu时间片了。此后调度器将把这个线程转变为可运行或阻塞状态。 就绪(Rannable) 在这种情况下,线程只要分配到时间片,他就运行
阅读全文
摘要:仿真任务 装饰花园 在这个仿真程序中花园委员会想统计每天通过多个门,进入花园的人数,每个门上有个十字转门相当于是计数器。转动任意一扇门就表示公园的分享计数值就会增加一。 代码如下: 计数器: 入口: 花园仿真类: public class Garden { public static void ma
阅读全文
摘要:线程本地存储 防止任务在共享资源上产生冲突的第二种方式就是根除对线程的共享,线程本地存储一种自动化机制。可以为使用相同变量的每个不同的线程都创建不同的存储。如果你有5个线程要使用变量X所表示的对象,那么线程本地存储就会生成5个用于x的不同的存储块。主要是 可以使得线程与状态关联起来。 public
阅读全文
摘要:原子类 JAVASE5 引入了诸如:AtomicInteger、AtomicLong、AtomicRenference等原子性变量,他们提供下面形式的原子性条件更新: boolean cpmpareAndSet(exceptedValue,updateValue); 在常规编程中很难看见,在涉及性能
阅读全文
摘要:原子性和易变性 要理解黄色标注的内容那得 了解一下java中的内存模型: Java内存模型FAQ : http://ifeve.com/jmm faq/ 同步和java内存模型: http://ifeve.com/syn jmm/ java内存模型指南: http://ifeve.com/jmm c
阅读全文
摘要:共享受限资源 关于线程的基本特性差不多介绍了,接下来是一些关于线程安全的问题了。 不正确的访问资源 定义一个检查器,去检查生成器生成的内容 public class EvenChecker implements Runnable { private IntGenerator intGenerator
阅读全文
摘要:线程的捕获异常 由于线程的特性使得不能捕获从现场逃逸的异常,一旦异常逃出run方法,他会向外传播到控制台,除非采取特别的方法来捕获这些异常。 异常传播到控制台: 使用try catch 来捕获异常: 控制台输出: 证明确实没有捕获到异常 异常传播到控制台了 为了解决这个问题,要修改线程产生的方式。T
阅读全文
摘要:join 一个线程上调用另一个线程,其效果是等待一段时间直到第二个线程结束才继续执行.也可以在join()加一个超时的参数,这样在这段时间到期还没有结束的话,join总能返回。 如果在一个线程中调用t.join(),那么此线程将被挂起直到t运行结束才恢复: 输出: sleeper:s1 is int
阅读全文
摘要:让步 yield() 给线程调度机制一个暗示:你的工作已经做得差不多了,可以让别的线程使用cpu了.这只是一个暗示,没有任何机制保证它会被采纳。 后台线程 后台线程是指程序执行时候,在后台提供一种通用服务的线程。并且这种线程并不属于程序的不可缺少的一部分。因此当所有的非后台线程结束时,程序也就截止了
阅读全文
摘要:多线程的一些其他操作: sleep public class SimplePriority implements Runnable { private int priority; private int countDown=5; public SimplePriority(int priority)
阅读全文
摘要:如果希望在任务完成时返回一个值,那么可以实现callable接口 callable的运行会产生Future对象,可以使用isDone()方法来查询Future是否完成。当任务完成时,它具有一个结果,可以调用get()方法来获取这个结果。也可以不使用isDone()直接调用get(),这种情况下get
阅读全文
摘要:java学习痛点难点就是多线程,同时很多公司面试时也要求精通多线程。为了克服这个难点,我写下学习多线程的所有遇到的值得记录的知识点。 先来一个线程测试类: public class LiftOff implements Runnable { private int countDown = 100;
阅读全文

浙公网安备 33010602011771号