java线程池停止线程停止线程 (Stopping a thread) As we know that there are no direct or shortcut ways to stop thread in Java. 众所周知,在Java中没有直接或快捷的方式来停止线程。 As we know thread in java stops when the execution of run() method comp…
Java的Object.wait(long)在等待时间过去后会继续往后执行吗
Object.wait(long)方法相比于wait,多了个等待时长,那么当等待时长过去后,线程会继续往下执行吗?
单个线程执行 多个线程并发执行
public class ThreadWaitDemo {
pu…
wait(long timeout)/notify()/notifyAll() 网上好多解释不是不全面就是有偏差,还是直接看官方解释
先来看一下源码:
public class Object {public final native void notify();public final native void notifyAll();public final native void wait(lo…
并发下ArrayList是不安全的,多线程操作同一个集合会出现java.util.ConcurrentModificationException 并发修改异常
解决方案:
1. List<String> list new Vector<>();
2. List<String> list Collections.synchronizedList(new Arra…
进程与线程的区别
进程是一段正在执行的程序,是资源分配的基本单元。线程是进程的一个执行单元,线程是轻量级的进程。一个程序中至少有一个进程,一个进程中至少有一个线程
实现线程的几种方式
继承Thread类
public class TestThread exte…
自定义线程池
class ThreadPoolTest{public static void main(String[] args){RejectPolicy<Runnable> rejectPolicy BlockingQueue::put;MyThreadPool pool new MyThreadPool(3, 1000, TimeUnit.MILLISECONDS, 4, rejectPolicy);for (int i 0; i < 30; i) {int j…
线程状态 验证线程状态
import lombok.SneakyThrows;
/*** author layman*/
public class Demo08 {public static void main(String[] args) throws InterruptedException {Demo08Service service new Demo08Service();Demo08ThreadA t1 new Demo08ThreadA(service);Demo08T…
执行run()与start()方法的区别: public class MyThread extends Thread{public MyThread(){System.out.println("MyThread构造方法:" Thread.currentThread().getName());}Overridepublic void run(){System.out.println("run方法&#x…
生产者与消费者问题
在面试中,生产者与消费者是高频问题之一
1.生产者和消费者问题 Synchronized 版
public class A {public static void main(String[] args) {Data data new Data();new Thread(() -> {for (int i 0; i < 10; i) {try {data.increment…
📝个人主页:五敷有你 🔥系列专栏:并发编程 ⛺️稳重求进,晒太阳 活锁
定义:活锁出现在两个线程互相改变对象的结束条件,最后谁也无法结束
代码示例
public class TestLiveLock {stati…
前言
AtomicIntegerArray提供了对数组元素的原子操作,与其他非数组的原子类相比,它的成员不是volatile的而是final的了。
JUC框架 系列文章目录
成员 private static final Unsafe unsafe Unsafe.getUnsafe();private static final int base unsafe…
目录
一、ctl介绍
二、线程池ctl源码
三、线程池ctl分析
1、private static int ctlOf(int rs, int wc) { return rs | wc; }
2、private final AtomicInteger ctl new AtomicInteger(ctlOf(RUNNING, 0));
3、private static int runStateOf(int c) { return c &am…
一、CPU缓存一致性问题
1. CPU缓存模型
CPU Cache 通常分为三级缓存:L1 Cache、L2 Cache、L3 Cache,级别越低的离 CPU 核心越近,访问速度也快,但是存储容量相对就会越小。其中,在多核心的 CPU 里,每个核心…
我先后下了openjdk-8-src-b132-03_mar_2014和openjdk8两份源码,里面对synchronize的实现有所不同,前者一上来就是轻量级锁(CAS),而后者会先看是否是偏向锁。我这里用的是后者的代码。 轻量级锁
我们先看一个简单的程序:
public class TestS…
前记:师夷长技以自强 1.用轮询实现的线程间通信机制
如下:
import java.util.ArrayList;
import java.util.List;class MyList{private List list new ArrayList();public void add(){list.add("haha");}public int size(){return list.siz…
一、不使用锁,利用volatile实现
//两个线程,一个打印奇数,一个打印偶数
public class OneToHundred{static volatile int flag 0;public static void main(String[] args){new Thread(new Task1(),"A").start();new Thread(new T…
12. 四大函数式接口
新时代的程序员:lambda表达式、链式编程、函数式接口、Stream流式计算
函数式接口:只有一个方法的接口,可以有一些默认的方法
如:Runnable接口函数 1)Function 函数型接口 public class Functio…
目录
一、什么是channel
二、为什么要有channel
三、channel操作使用
初始化
操作
单向channel
双向channel,可读可写
四、close下什么场景会出现panic
五、总结 一、什么是channel Channels are a typed conduit through which you can send and receive …
public class Test9 {static Object lock new Object();static int num 1;static int loopNum 5;/*** 线程t1, t2, t3分别交替输出 a, b, c > 最终输出 abcabcabcabcabc**/public static void main(String[] args) throws InterruptedException {Thread t1 new Thread((…
Java的多线程与并发编程 一、线程的实现 多线程创建 线程继承Thread类,实现run方法 public class Thread1 extends Thread {public void run(){//线程要执行的代码}
} 线程实现Runnable接口,实现run方法 public class Thread1 implements Runnable {p…
CAS是什么
CAS是compare and swap的缩写,即我们所说的比较交换。该操作的作用就是保证数据一致性、操作原子性。
cas是一种基于锁的操作,而且是乐观锁。在java中锁分为乐观锁和悲观锁。悲观锁是将资源锁住,等之前获得锁的线程释放锁之后&am…