多线程
多线程的基本知识
linjun20
路漫漫其修远兮,吾将上下而求索
展开
-
ForkJoin
Java 7开始引入了一种新的Fork/Join线程池,它可以执行一种特殊的任务:把一个大任务拆成多个小任务并行执行。工作窃取(work-stealing)算法是指某个线程从其他队列里窃取任务来执行。那么为什么需要使用工作窃取算法呢?假如我们需要做一个比较大的任务,我们可以把这个任务分割为若干互不依赖的子任务,为了减少线程间的竞争,于是把这些子任务分别放到不同的队列里,并为每个队列创建一个单独的线程来执行队列里的任务,线程和队列一一对应,比如A线程负责处理A队列里的任务。但是有的线程会先把自己队列.原创 2021-11-21 17:26:48 · 309 阅读 · 0 评论 -
集合线程安全
listHashSetHashMappublic static void main(String[] args) { // List<String>list=new ArrayList<>(); //解决方案1// List<String>list=new Vector<>();//jdk1.0线程同步 底层synchronized .原创 2021-11-20 20:30:27 · 294 阅读 · 0 评论 -
多线程通讯
多线程编程步骤第一步 创建资源类,在资源类中创建属性和操作方法第二步 在资源类中操作方法(1)判断 一般用while (2) 干活 (3) 通知第三步 创建多个线程,调用资源类的操作方法1.线程通讯两个线程,一个线程执行+1 另一个线程执行-1使用synchronizedpublic class DataOperate { private int number=0; public synchronized void increase()...原创 2021-11-20 20:09:37 · 300 阅读 · 0 评论 -
多线程之手动实现锁
1.利用synchronized实现import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;public class MyReentraLock implements Lock{ private boolean isLocked=false; Thread lockBy=null;原创 2021-11-07 23:43:33 · 124 阅读 · 0 评论 -
原子类的使用与原理
1.原子类的使用public class Sequence { //原子整型 private AtomicInteger value=new AtomicInteger(0); private int []a= {2,4,6,8}; //原子数组 AtomicIntegerArray array=new AtomicIntegerArray(a); //原子引用类型 AtomicReference<User> user=new AtomicReference原创 2021-11-07 23:32:48 · 220 阅读 · 0 评论 -
volatile 关键字
作用:1.线程可见 如果多个线程都使用了同一个变量,那么其中一个线程改变了该变量,其他线程都会读取到该变量的最新值。加上volatile关键字,强制线程每次读取该值的时候都去“主内存”中取值。2.防止指令重排序class ThreadVolatileDemo extends Thread { public volatile boolean flag = true; @Override public void run() { System.ou...原创 2021-11-07 21:18:09 · 41 阅读 · 0 评论 -
多线程之单例
饿汉式public class Singleton { //构造函数私有 private Singleton() { } //定义静态实例对象 private static Singleton instance=new Singleton(); /** * 饿汉式 * @return */ public static Singleton getSingleton() { return instance; } }懒汉式public cl原创 2021-11-07 16:56:09 · 48 阅读 · 0 评论 -
多线程之死锁用例
死锁用例public class DeadLock { private static String A="A"; private static String B="B"; public static void main(String[] args) { Thread threadA=new Thread(new Runnable() { @Override public void run() { synchronized(A){ System.out原创 2021-11-07 14:00:52 · 74 阅读 · 0 评论 -
终止线程使用interrupt
public class ThreadInterrupted{ public static void main(String[] args) throws InterruptedException { ThreadDemo demo1 = new ThreadDemo("线程1"); ThreadDemo demo2 = new ThreadDemo("线程2"); demo1.start(); demo2.sta...原创 2021-11-06 17:38:43 · 335 阅读 · 0 评论 -
线程的使用
常用线程api方法 start() 启动线程 currentThread() 获取当前线程对象 getID() 获取当前线程ID Thread-编号 该编号从0开始 getName() 获取当前线程名称 ...原创 2019-09-08 16:16:59 · 75 阅读 · 0 评论 -
线程的状态以及创建线程
1.线程的状态线程有五个状态:新建状态、就绪状态(可运行状态)、运行状态、阻塞状态及死亡状态。新建状态当用new操作符创建一个线程时, 例如new Thread(r),线程还没有开始运行,此时线程处在新建状态。 当一个线程处于新建状态时,程序还没有开始运行线程中的代码。就绪状态 一个新创建的线程并不自动...原创 2019-09-08 15:49:00 · 182 阅读 · 0 评论