Java多线程
文章平均质量分 63
BtWangZhi
这个作者很懒,什么都没留下…
展开
-
Java多线程-CompletableFuture
ExecutorService executorService = Executors.newFixedThreadPool(8); CompletableFuture<Integer> firstFuture = CompletableFuture.supplyAsync(() -> { log.info("开始执行第一个任务"); try { Thread.sleep(1000);原创 2022-01-27 10:42:19 · 435 阅读 · 0 评论 -
Java多线程--重写线程池
SiteMesh支持两种方法来配置,一种是XML,一种是java代码。 1 XML方式<sitemesh> <!-- 所有路径下的文件均由下中的文件来装饰--> <mapping decorator="/default-decorator.html"/> <!-- 根据路径信息配置指定的装饰文件--> <mapping path="/admin/*" decorator="/anot原创 2017-07-23 15:05:32 · 479 阅读 · 0 评论 -
Java--HashMap与ConcurrentHashMap
添加key value值,源码注释final V putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict) { Node<K,V>[] tab; Node<K,V> p; int n, i; if ((tab = tab...原创 2019-03-01 17:30:47 · 526 阅读 · 0 评论 -
Java多线程--ThreadLocal
public class DateUtil { private final static SimpleDateFormat sdfYear = new SimpleDateFormat("yyyy"); private final static SimpleDateFormat sdfDay = new SimpleDateFormat("yyyy-MM-dd"); p原创 2018-01-12 18:08:41 · 509 阅读 · 0 评论 -
Java多线程--阻塞队列
如果队列满了,添加元素的线程将会陷入等待状态,而队列为空,获取元素的线程将会陷入等待。有了BlockingQueue,我们不需要关心什么时候需要阻塞线程,什么时候需要唤醒线程。这一切都交给了BlockingQueue。...原创 2020-02-08 16:00:08 · 671 阅读 · 0 评论 -
Java多线程--自旋锁
自旋锁,是指不会阻塞当前线程,而是采用循环的方式去获取锁,这样的话减少上下文切换,但是同时会消耗CPU资源。 //---------------------------自旋锁----------------------- private static AtomicReference<Thread> atomicReference=new AtomicReference&...原创 2019-12-15 17:07:29 · 258 阅读 · 0 评论 -
Java多线程--线程状态
线程的几种状态及相互切换摘自https://www.cnblogs.com/hejing-swust/p/8038263.html阻塞在wait和sleep方法调用的时候,会强制使用try-catch包住异常,这个是因为线程在执行的过程中受外部干预导致线程执行异常,需要开发者在程序中对中断做出相应的处理 @Test public void test15() throws I...转载 2019-12-14 16:58:55 · 249 阅读 · 0 评论 -
java--多线程入门
看到一个利用多线程来排序的博客,觉得蛮有意思,来学习下多线程。 大神博客:http://blog.csdn.net/qq_25827845/article/details/54800064public class SleepSort { /** * @param args */ public static void main(String[] args) {原创 2017-02-15 17:23:14 · 534 阅读 · 0 评论 -
Java多线程--重排序
计算机在执行程序的时候,为了提高程序的性能,编译器和处理器常常会对指令做重排序,源代码-》编译器优化的重排序-》指令并行的重排序-》内存系统的重排序-》最终执行的指令。其中指令并行的重排序、内存系统的重排序称为处理器重排序。...原创 2019-12-07 19:49:33 · 295 阅读 · 0 评论 -
Java多线程--volatile
volatile是Java虚拟机提供的轻量级同步机制1 保证可见性2 不保证原子性3 禁止指令重排序原创 2019-12-02 22:24:03 · 257 阅读 · 1 评论 -
java--Synchronized
1 等待线程 Thread中提供一个让一个线程等待另外一个线程完成的方法–join(),在某个程序执行流中调用其他线程的join,调用者将会被堵塞,知道被调用的线程执行完成为止 例:public class TextDemo_10 extends Thread { public TextDemo_10(String name) { super(name); }原创 2017-03-08 01:50:38 · 322 阅读 · 1 评论 -
java多线程--理论知识
1 线程同步, 两个线程并发修改同一个资源。使用synchronize,线程开始执行同步代码块之前,必须先获得对同步监视器的锁定。任何时候只能有一个线程可以获得对同步监视器的锁定,当同步代码块执行完成后,该线程会释放对该同步监视器的锁定。即加锁-》修改-》释放锁,可以保证并发线程在任何时候只有一个线程可以进入共享资源的代码区。 2 同步方法,3 死锁 当两个线程互相等待对方释放同步监视器时就会原创 2017-03-10 23:43:03 · 336 阅读 · 0 评论 -
Java多线程-线程安全
多个线程竞争同一资源时,会出现线程安全问题,例如银行取钱场景。public class Account { private String accountNo; private Integer balance; public Account(String accountNo, Integer balance) { super(); ...原创 2018-05-05 15:28:26 · 232 阅读 · 0 评论 -
Java多线程--线程通信使用案例
采用Object中的方法模拟存取取钱的操作。只有当存钱后才执行取钱操作。 账户类:public class Account { private String accountNo; private double balance; /** * 是否存钱标示 */ private boolean flag = false; pub...原创 2018-07-01 18:10:57 · 271 阅读 · 0 评论 -
Java多线程--CountDownLatch、CyclicBarrier、Semaphore
CountDownLatch定义一个计数器,每个线程调用一次countDown时减一,直到变成零,await才会向下执行public static void main(String[] args) throws InterruptedException { new Thread(new Runnable() { @Override public void run() { ...原创 2018-09-18 00:04:41 · 276 阅读 · 0 评论 -
Java--可重入锁
可重入锁:在一个锁的获取中,可允许多个线程获取该锁。public class SemapDemo implements Runnable { private Semaphore semaphore = new Semaphore(5); @Override public void run() { try { semaphore...原创 2018-07-01 18:38:39 · 221 阅读 · 0 评论 -
Java多线程--ReentrantLock及相关类使用案例
读-读不互斥:读读之间不阻塞 读-写互斥:读阻塞写,写也会阻塞读。 写-写互斥:写写阻塞。 jdk源中对ReentrantReadWriteLock提供了例子public class CachedData { Object data; volatile boolean cacheValid; final ReentrantReadWriteLock rwl = n...原创 2018-07-01 22:52:50 · 395 阅读 · 0 评论 -
Java多线程--死锁
死锁可中断public class ReentranLockInterruptibly implements Runnable { private static ReentrantLock reentrantLock01 = new ReentrantLock(); private static ReentrantLock reentrantLock02 = new Ree...原创 2018-06-29 01:05:20 · 293 阅读 · 0 评论 -
Java多线程--AQS源码解析
线程分守护线程和用户线程class DaemonThread implements Runnable { @Override public void run() { System.out.println(&quot;进入了守护线程&quot; + Thread.currentThread().getName()); try { writeT...原创 2018-06-25 00:50:14 · 204 阅读 · 0 评论 -
Java--线程池
频繁的启动关闭一个线程的成本是很高的,所以才有了线程池的概念,通过在初始化的时候创建大量的线程,放在线程池中,程序将一个Runnable对象传给线程池,线程会启动一个线程去执行他们的run方法。当执行完毕后,该线程不会马上死亡,而是会交还给线程池中,等待下一个。 主要的线程池有: ExecuteService:代表尽快执行任务的线程池。 ScheduledExecutorService:可以延原创 2018-05-06 17:21:35 · 1947 阅读 · 0 评论 -
Java--线程池应用--定时器
public class ScheduleExecutorServiceDemo { public static void main(String[] args) { ScheduledExecutorService executorService = Executors .newScheduledThreadPool(10); ...转载 2018-07-28 16:34:10 · 1120 阅读 · 0 评论 -
Java--线程异步回调模型
在实际的应用场景中,将一个任务让一个线程异步去处理,处理完成后回调。 数据接口:public interface Data { public String getResult();}实现类:public class FutureData implements Data { protected RealData realData = null; prot...转载 2018-07-29 22:57:13 · 655 阅读 · 0 评论 -
Java多线程--原子更新类
循环CAS实现原子操作public class Counter { private AtomicInteger atomicI = new AtomicInteger(0); private int i = 0; public static void main(String[] args) { final Counter cas = new Co...原创 2018-08-28 22:27:12 · 465 阅读 · 0 评论 -
Java多线程--数据库连接池与等待超时模式
public class ConnectionPool { /** * 空闲连接池 */ private LinkedList<Connection> pool = new LinkedList<Connection>(); /** * 连接池初始化 * @param initialSize */...原创 2018-09-02 15:15:49 · 1849 阅读 · 0 评论 -
Java--并发编程基础
案例–public class AtomicIntegerTest { private static final AtomicInteger ai=new AtomicInteger(); public static void main(String[] args) { System.out.println(ai.getAndIncrement()); ...转载 2018-09-09 23:43:41 · 147 阅读 · 0 评论 -
Java--ReentrantLock及相关类源码解析
使用案例public class Cache { private static final Map<String, Object> map = new HashMap<String, Object>(); private static ReentrantReadWriteLock readWriteLock = new ReentrantReadWr...原创 2018-09-09 23:45:29 · 182 阅读 · 0 评论 -
Java多线程--FutureTask
异步执行任务,处理其他的事情,然后获取返回结果。案例:异步去做蛋糕,然后去做其他事情,做完其他事情然后去取蛋糕。public static void main(String[] args) throws InterruptedException, ExecutionException { Callable<Integer> call = new Callable<...原创 2018-09-17 23:28:55 · 276 阅读 · 0 评论 -
Java多线程--AQS使用案例
1 可见性:一个线程对共享变量值的修改,能够及时的被其他线程看到。 2 共享变量:如果一个变量在多个线程的工作内存中都能存在副本,那么这个变量就是这几个线程的共享变量。所有的变量都存在主内存中, 每个变量都有自己独立的工作内存,里面保存该线程使用到的变量的副本。 线程对共享变量的所有操作都必须在自己的工作内存中进行,不能直接从主内存中读取。 不同线程之间不能互相访问变量,只能通过...原创 2018-06-26 00:53:20 · 461 阅读 · 0 评论