![](https://img-blog.csdnimg.cn/20210816124345334.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
并发编程
文章平均质量分 67
多线程高并发
桀骜浮沉
西安Java程序员
展开
-
多线程代码演示
多线程代码演示wait/notify演示/** * 演示wait()/notify() */public class WaitAndNotifyTest { public static void main(String[] args) { Object obj= new Object(); new Thread(new Runnable() { @Override public void run() {原创 2020-12-01 10:30:22 · 126 阅读 · 0 评论 -
显示锁Lock基本操作
显示锁Lock基本操作import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class LockThread extends Thread{ private Lock lock; private static int num=0; public LockThread(Lock lock) { this.lock=lock;原创 2020-11-25 15:13:28 · 669 阅读 · 0 评论 -
内部锁synchronized基本使用
synchronized基本使用对于线程来说,如果多个线程只是相互间单独执行的话,本身是没有太大意义的,一般来说,都是需要多个线程,相互间协作来进行工作的,这样使用,才会对系统带来实际的意义。 在Java中支持多个线程同时访问一个对象或对象中的成员变量,但是如果没有任何保护机制的话,就会出现数据不一致的情况,效果如下:public class TestThread { public static void main(String[] args) { TestThread te原创 2020-11-24 17:10:11 · 171 阅读 · 0 评论 -
CAS原理
CAS原理CAS(Compare And Swap),即比较并交换 CAS(V,E,N)。是解决多线程并行情况下使用锁造成性能损耗的一种机制,CAS操作包含三个操作数——要更新的变量(V)、预期原值(E)和新值(N)。核心算法是如果V 值等于E 值,则将V 的值设为N 。若V 值和E 值不同,则说明已经有其他线程做了更新,则当前线程不做更新,直到V、E两个值相等,才更新V的值。//自定义原子类public class AtomicityClass { private volatile long原创 2020-11-23 15:19:29 · 72 阅读 · 1 评论 -
volatile关键字
volatile关键字Java中提供了一种较弱的同步机制,即volatile关键字。可以把它看成是synchronized的轻量级实现,但是其并不能完全替代synchronized,或者说将其当做锁来使用。volatile具有可见性与有序性,但不具有原子性。即通过volatile修饰的共享变量(类的成员变量和静态成员变量)不直接存在于工作线程,而是存在于主内存中。线程每次读取时,都会去主内存中进行读取,从而保证其他线程每次对于该成员变量都能获取最新值。 简单来说,一个共享变量一旦被volatile修饰原创 2020-11-23 14:31:33 · 68 阅读 · 0 评论 -
多线程特性(原子性、可见性、有序性)
多线程特性原子性 所谓原子性即:一个或者多个操作,要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。 在原子操作中,本质上拒绝多线程操作的,不论是单核或多核服务器,当要对某一个数据进行原子操作时,同一时刻只有有一个线程能够对其进行操作,简单来说,在整个操作过程中不会被线程调度器打断,如a=1就是一个原子操作,但a++则不是一个原子操作,因为其内部会额外产生一个新的Integer对象。 举个例子,假设对一个32位的变量赋值,操作分为两步:低16位赋值、高16位赋值。当线程A对低16位原创 2020-11-19 17:17:23 · 425 阅读 · 0 评论 -
线程生命周期
线程生命周期Thread.State state = thread.getState();Thread.State 枚举类型NEW至今尚未启动的线程的状态。线程刚被创建,但尚未启动。RUNNABLE可运行线程的线程状态。线程正在JVM中执行,有可能在等待操作系统中的其他资源,比如处理器。BLOCKED受阻塞并且正在等待监视器的某一线程的线程状态。处于受阻塞状态的某一线程正在等待监视器锁,以便进入一个同步的块/方法,或者在调用 Object.wait 之后再次进入同步的块/方法。在Thr原创 2020-11-18 16:22:18 · 122 阅读 · 0 评论 -
多线程常用方法
线程常用方法currentThreadThread.currentThread();获取当前线程Thread.currentThread().getName();获取当前线程名称setName/getNamethread.setName(“test1”);设置线程名thread.getName();获取线程名isAlivethread.isAlive();线程是否存活sleepThread.sleep(1000);线程睡眠1秒getIdthread.getId();获取线程唯一ID原创 2020-11-18 15:33:46 · 148 阅读 · 0 评论