自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 并发编程-同步机制(三)

三、ThreadLocal 线程本地变量

2022-04-04 16:42:37 254

原创 并发编程-同步机制(二)

二、volatile 最轻量的同步机制 volatile 保证了不同线程对这个变量可见性,即一个线程对变量进行修改,其他线程就立即可见。 但是volatile 不保证变量的原子性,所以它适合的场景是一写多读。如果出现了多写的情况那么就会出现线程安全问题。 可见性测试 /** * volatile 可见性测试 * * @author asus * */ public class VolatileReadTest { private static int count; pr..

2022-03-17 14:32:59 74

原创 并发编程-同步机制(一)

一、synchronized 内置锁 java 关键字synchronized 用于保证线程对变量访问的可见性与排他性,又可以称之为内置锁机制。 synchronized 可以修饰方法跟同步块上来进行使用,确保多个线程只有一个线程处于方法或者同步块中。 简单测试 /** * 演示synchronized 基本使用方法 * * @author ckj * */ public class SynchronizedTest { private int num = 0; publi..

2022-03-16 20:40:19 650

原创 并发编程-并发工具类(六)

六、Callable、Future、FutureTask Runable 是一个接口和Thread 一样位于java.lang 包之下,所以才会有 jdk 设计者提出,新建线程的两种方式(JDK1.0) There are two ways to create a new thread of execution 但是Runable 接口的返回值类型是void,有时候无法满足我们的要求。所以在JDK1.5 的时候由Doug Lea 设计了Callable 接口,所以我们新建线程如果有返回值需求的话..

2022-03-16 14:37:53 333

原创 并发编程-并发工具类(五)

Exchange

2022-03-15 18:16:30 6579

原创 并发编程-并发工具类(四)

4、Semaphore 信号量

2022-03-14 18:04:04 1125

原创 并发编程-并发工具类(三)

public CyclicBarrier(int parties, Runnable barrierAction) { if (parties <= 0) throw new IllegalArgumentException(); this.parties = parties; this.count = parties; this.barrierCommand = barrierAction; } public Cycli...

2022-03-11 16:16:37 609

原创 并发编程-并发工具类(二)

二、CountDownLatch闭锁

2022-03-09 16:12:36 60

原创 并发编程-并发工具类(一)

一、Fork-Join 相对于显示去new 一个线程(使用Thread)其实我们在实际工作中更多的使用线程池。当然除了线程池还可以使用forkjoin。只要我们遵循了forkjoin的开发模式,就可以写出很好的多线程并发程序。 刚开始使用forkjoin 的时候其实有个疑问,就是javaa 除了提供了ThreadPoolExecutor 之外还提拱了ForkJoinPool,这个类跟ThreadPoolExecutor 类大体相同,那么实际应用中该如何选择呢? 其实这两个池都是实现Executo...

2022-03-08 21:24:04 328

原创 并发编程-线程间的协作(四)

等待与通知模式实现一个简单的线程池,直接上代码 import java.util.LinkedList; /** * 使用等待通知实现一个简单的数据库连接池 * * @author ckj * */ public class DbPool { /* 定义一个容器用做数据库连接池,由于数据库连接多做获取与释放操作所有选用LinkedList,池化技术与队列技术会在后续章节演示 */ public LinkedList<Connection> connectionPool..

2022-03-08 10:32:58 786

原创 并发编程-线程间的协作(三)

三、等待与通知 wait()/notify()/notifyAll() 这三个方法都是object 类提供的其中 wait(): 调用该方法的线程进入WAITING 状态,同时释放所持有的对象锁,只有等待通知或者中断才会唤起。 notify(): 随机通知一个等待在该对象的线程,使其从wait 方法上唤起,唤起的前提是该线程获取了该对象上的锁,如果没有获取到锁则重新进入WAITING状态 notifyAll(): 通知所有等待在该对象上的线程。 其实我们在使用等待与通知是有标准模...

2022-03-04 14:33:30 118

原创 并发编程-线程间的协作(二)

二、yield()方法 当前线程调用yield方法,通知虚拟机当前线程让出cpu 占有权,但是什么时候让出是不可设定的,也不会释放锁资源。所以使用yield方法最好是释放锁后在调用。 注:执行yield方法的线程有可能在进入到就绪状态后在被操作系统选中马上执行。 由于不好演示这边不做代码演示。 三、join()方法 join() 方法可以将两个交替执行的线程合并为顺序执行,概念比较抽象直接上代码。 /** * join() 方法演示类 * @author ckj * */ public

2022-03-03 21:08:52 121

原创 并发编程-线程间的协作(一)

java 对线程的常用方法大概有以下几个 一、线程的启动与中止 java 启动线程的方式大概有以下几种 打开Thread上的注释:可以清除看到设计者给我们提供的样例 启动:注callable 方式暂时不做演示 1、继承Thread 类 2、实现Runnable /** * 线程启动演示 * * @author ckj * */ public class MyThread { private static class UserThread extends Th.

2022-03-03 14:23:10 137

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除