
Java并发编程
star9595
只有回不了的过去,没有到不了的明天
展开
-
多线程notify与wait
使用wait和notify方法实现线程之间的通信,注意,这两个方法是Object类的方法,也就是说Java为所有的对象都提供的这两个方法。1 wait和notify必须配合synchronized关键字使用。2 wait方法释放锁,notify方法不释放锁。3 涉及到线程之间的通信,就肯定会用到 volatile 修饰。import java.util.ArrayList;import java.util.List;/** * @Auther: 13213 * @Date: 2020/原创 2020-11-16 11:08:11 · 348 阅读 · 0 评论 -
synchronized同步代码块
特性1. synchronized(非this对象x)同步代码块格式进行同步操作时,对象监视器必须为同一个,如果不是同一个,运行结果就是异步调用了,就会交叉运行;示例1:package thread;/** * @Auther: 13213 * @Date: 2020/9/25 17:24 * @Description: */public class Service { private String usernameParam; private String pass原创 2020-09-27 09:06:04 · 449 阅读 · 0 评论 -
synchronized同步代码块
并发线程在访问 synchronized(this) 同步代码块时,一段时间内只能有一个线程被执行,另一个线程必须等待当前线程执行完这个代码块后才能执行;示例代码:Task.javapackage com.daimakuai;/** * @Auther: 13213 * @Date: 2020/5/30 17:59 * @Description: */public class Task { public void doLongTimeTask(){ fo原创 2020-05-30 21:23:30 · 212 阅读 · 0 评论 -
synchronized深入理解
synchronized注意:在一个类中,不管有几个方法进行了同步(synchronized),这些同步方法都共有一把锁,只要一个线程获得了这个对象锁,其他的线程就不能访问该对象的任何一个同步方法,但是可以访问其他的非同步方法;synchronized可重入机制:即在一个 synchronized 方法/块的内部调用本类的其他 synchronized 方法/块时,是永远可以得到锁的;synchronized实现任务的顺序执行示例:Main.javapackage com.shunxu;原创 2020-05-30 17:35:46 · 137 阅读 · 0 评论 -
分布式应用中的分布式锁
分布式应用中的分布式锁如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要通过一些互斥手段来防止彼此之间的干扰,以保证一致性,在这种情况下,就需要使用分布式锁,分布式锁就是指在分布式的部署环境下,通过锁机制来让多客户端互斥的对共享资源进行访问。分布式锁的要求:1. 互斥性–在分布式系统环境下,一个方法在同一时间只能被一个机器的一个线程执行;2. 高性能的获取锁与释放锁;3. 具备可重入特性–当一个客户端获取锁之后,这个客户端可以再次获取锁;一般有三种实原创 2020-05-26 09:28:39 · 181 阅读 · 0 评论 -
多线程安全
一、特性:方法中的变量不存在非线程安全问题,永远都是线程安全的,这是方法内部的变量是私有的特性决定的。示例代码;1.HasSelfPrivateNum.javapackage com.threadtest6;public class HasSelfPrivateNum { public void addI(String username){ try { int num = 0; if (username.equals.原创 2020-05-17 20:57:30 · 134 阅读 · 0 评论 -
线程停止
1.package com.threadtest4;public class MyThread extends Thread{ @Override public void run(){ super.run(); for (int i = 0; i < 500000; i++) { if (this.isInterrupted()){ System.out.println("已经停止,我要退原创 2020-05-17 14:59:40 · 125 阅读 · 0 评论 -
线程让步(yield)和线程睡眠(sleep)区别
线程睡眠(sleep)让当前正在执行的线程暂停一段时间,并进入阻塞状态,则可以通过调用Thread类的静态sleep()方法来实现。当前线程调用sleep()方法进入阻塞状态后,在其睡眠时间内,该线程不会获得执行的机会,而其它任何优先级的线程都可以得到执行的机会,即使系统中没有其它可执行的线程,处于sleep()的线程也不会执行,sleep()是用来暂停线程的执行。线程让步(yield)y...转载 2020-05-04 10:41:22 · 714 阅读 · 0 评论 -
Java提供的几种线程池总结
Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程newFixedThreadPool创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。newScheduledThreadPool创建一个定长线程池,支持定时和周期性任务执行newSingl...原创 2019-08-29 23:04:49 · 384 阅读 · 0 评论 -
Java并发中CompletionService使用
应用场景当向Executor提交多个任务并且希望获得它们在完成之后的结果,如果用FutureTask,可以循环获取task,并调用get方法去获取task执行结果,但是如果task还未完成,获取结果的线程将阻塞直到task完成,由于不知道哪个task优先执行完毕,使用这种方式效率不会很高。在jdk5时候提出接口CompletionService,它整合了Executor和BlockingQueue...原创 2018-04-12 15:23:39 · 266 阅读 · 0 评论 -
volatile关键字解析
volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解一下...原创 2018-03-26 21:21:33 · 145 阅读 · 0 评论