- 博客(13)
- 收藏
- 关注
原创 并发编程-同步机制(二)
二、volatile 最轻量的同步机制 volatile 保证了不同线程对这个变量可见性,即一个线程对变量进行修改,其他线程就立即可见。 但是volatile 不保证变量的原子性,所以它适合的场景是一写多读。如果出现了多写的情况那么就会出现线程安全问题。 可见性测试 /** * volatile 可见性测试 * * @author asus * */ public class VolatileReadTest { private static int count; pr..
2022-03-17 14:32:59 97
原创 并发编程-同步机制(一)
一、synchronized 内置锁 java 关键字synchronized 用于保证线程对变量访问的可见性与排他性,又可以称之为内置锁机制。 synchronized 可以修饰方法跟同步块上来进行使用,确保多个线程只有一个线程处于方法或者同步块中。 简单测试 /** * 演示synchronized 基本使用方法 * * @author ckj * */ public class SynchronizedTest { private int num = 0; publi..
2022-03-16 20:40:19 688
原创 并发编程-并发工具类(六)
六、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 356
原创 并发编程-并发工具类(三)
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 630
原创 并发编程-并发工具类(一)
一、Fork-Join 相对于显示去new 一个线程(使用Thread)其实我们在实际工作中更多的使用线程池。当然除了线程池还可以使用forkjoin。只要我们遵循了forkjoin的开发模式,就可以写出很好的多线程并发程序。 刚开始使用forkjoin 的时候其实有个疑问,就是javaa 除了提供了ThreadPoolExecutor 之外还提拱了ForkJoinPool,这个类跟ThreadPoolExecutor 类大体相同,那么实际应用中该如何选择呢? 其实这两个池都是实现Executo...
2022-03-08 21:24:04 365
原创 并发编程-线程间的协作(四)
等待与通知模式实现一个简单的线程池,直接上代码 import java.util.LinkedList; /** * 使用等待通知实现一个简单的数据库连接池 * * @author ckj * */ public class DbPool { /* 定义一个容器用做数据库连接池,由于数据库连接多做获取与释放操作所有选用LinkedList,池化技术与队列技术会在后续章节演示 */ public LinkedList<Connection> connectionPool..
2022-03-08 10:32:58 822
原创 并发编程-线程间的协作(三)
三、等待与通知 wait()/notify()/notifyAll() 这三个方法都是object 类提供的其中 wait(): 调用该方法的线程进入WAITING 状态,同时释放所持有的对象锁,只有等待通知或者中断才会唤起。 notify(): 随机通知一个等待在该对象的线程,使其从wait 方法上唤起,唤起的前提是该线程获取了该对象上的锁,如果没有获取到锁则重新进入WAITING状态 notifyAll(): 通知所有等待在该对象上的线程。 其实我们在使用等待与通知是有标准模...
2022-03-04 14:33:30 137
原创 并发编程-线程间的协作(二)
二、yield()方法 当前线程调用yield方法,通知虚拟机当前线程让出cpu 占有权,但是什么时候让出是不可设定的,也不会释放锁资源。所以使用yield方法最好是释放锁后在调用。 注:执行yield方法的线程有可能在进入到就绪状态后在被操作系统选中马上执行。 由于不好演示这边不做代码演示。 三、join()方法 join() 方法可以将两个交替执行的线程合并为顺序执行,概念比较抽象直接上代码。 /** * join() 方法演示类 * @author ckj * */ public
2022-03-03 21:08:52 138
原创 并发编程-线程间的协作(一)
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 156
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人