摘要:从JDK1.5 开始提供了 java.util.concurrent.atomic 包,该包提供了一种用法简单、性能高效、线程安全的更新一个变量的方法 原子更新基本类型类 AtomicBoolean:原子更新布尔类型 AtomivInteger:原子更新整型 AtomicLong:原子更新长整型 原
阅读全文
摘要:在 java.util.concurrent 包中提供了 4 个有用的并发工具类 CountDownLatch 允许一个或多个线程等待其他线程完成操作,课题点 Thread 类的 join() 方法 CyclicBarrier 可以用于多线程计算数据,最后合并计算结果的场景 Semaphore 用来
阅读全文
摘要:进程 Process 线程 Thread 协程 Coroutine
阅读全文
摘要:synchronized和Lock都是Java语言提供的两种实现对共享资源进行同步的机制。其中synchronized使用Object对象本身的wait()、notify()、notifyAll()方法实现调度机制,而Lock可以使用Condition进行进程之间的调度,完成synchronized
阅读全文
摘要:两者都是Thread类的静态方法,定义如下 public static void sleep(long millis) throws InterruptedException public static void yield() 1)sleep()方法给其他线程机会时不会考虑线程的优先级,因此会给低
阅读全文
摘要:通过调用线程类的start()方法来启动一个线程,使线程处于就绪状态,即可以被JVM来调度执行,在调度过程中,JVM通过调用线程类的run()方法来完成实际的业务逻辑,当run()方法结束后,此线程就会终止。 如果直接调用线程类的run()方法,会被当作一个普通的函数调用,程序中仍然只有主线程这一个
阅读全文
摘要:所谓同步,就是发出一个功能调用时,在没有得到结果之前,该调用就不返回或者继续执行后续操作。 异步跟同步相对,当一个异步调用发出后,调用者在没有得到结果之前,就可以继续执行后续操作。当这个调用完成后,一般通过状态、通知和回调的方式来通知调用者。对于异步调用,调用的返回并不受调用者控制。 根据同步的定义
阅读全文
摘要:问题 在 int i = 0; i = i++; 语句中,i = i++是线程安全的么?如果不安全,请说明上面操作在JVM中的执行过程,为什么不安全?说出JDK中哪个类能达到以上的效果,并且是线程安全而且高效的,简述其原理。 回答 语句 i = i++;不是线程安全的。 该语句执行过程如下, 先把
阅读全文
摘要:1. volatile 和 synchronized 关键字 2. 等待/通知机制 3. 管道输入/输出流 4. Thread.join()的使用 5. ThreadLocal的使用 1. volatile 和 synchronized 关键字 根据 volatile 和 synchronized
阅读全文
摘要:1 package com.test.multithreadDemo; 2 3 import java.io.*; 4 import java.util.Map; 5 import java.util.Random; 6 import java.util.concurrent.locks.Condition; 7 import java.util.concurren...
阅读全文
摘要:wait()是Object类的方法,当一个线程执行到wait()方法时,该线程就进入到一个和该线程相关的等待池中,同时释放了对象锁(暂时失去对象锁,wait(long timeout)超时时间到后还需要返还对象锁),其他线程可以访问同步方法或同步代码块; wait()使用notify() / not
阅读全文
摘要:根据 java.lang.Thread.State 中的描述Thread有处于以下6种状态中的一种: NEW(初始状态):A thread that has not yet started is in this state RUNNABLE(就绪状态):A thread executing in t
阅读全文
摘要:在Java中,可以通过new Thread 的方法来创建一个新的线程执行任务,但是线程的创建是非常耗时的,而且创建出来的新的线程都各自运行、缺乏统一的管理,这样的后果是可能导致创建过多的线程从而过度消耗系统的资源,最终导致性能急剧下降,线程池的引入就是为了解决这些问题。 所谓线程池就是将多个线程放在
阅读全文
摘要:当时用多线程访问同一个资源时,非常容易出现线程安全的问题,例如当多个线程同时对一个数据进行修改时,会导致某些线程对数据的修改丢失。因此需要采用同步机制来解决这种问题。 第一种 同步方法 第二种 同步代码块 第三种 使用特殊成员变量(volatile 成员变量)实现线程同步(前提是对成员变量的操作是原
阅读全文
摘要:第一种 实现Runnable接口,覆写run()方法 第二种 继承Thread类,覆写run()方法 第三种 利用Callable接口、Executors工具类、ExecutorService接口、Future接口实现有返回结果的多线程 第一种 实现Runnable接口,覆写run()方法 ① 自定
阅读全文
摘要:终止线程一般建议采用的方法是让线程自行结束,进入Dead(死亡)状态,就是执行完run()方法。即如果想要停止一个线程的执行,就要提供某种方式让线程能够自动结束run()方法的执行。比如设置一个标志来控制循环是否执行,通过这种方式让线程离开run()方法。 第一种 使用Thread类提供的stop(
阅读全文