![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
线程
oh my 桂桂
努力当个打工人
展开
-
可重入锁
同步方法public class ReEnterLockDemo { static Object objectLockA = new Object(); public static void m1(){ new Thread(() -> { synchronized (objectLockA){ System.out.println(Thread.currentThread().getName()+"\t"+"原创 2021-03-26 19:45:25 · 81 阅读 · 0 评论 -
死锁
一、产生死锁代码public class Main{ public static void main(String[] args) { Object o1 = new Object(); Object o2 = new Object(); //t1 和 t2 两个线程共享o1,o2 Thread t1 = new MyThread1(o1,o2); Thread t2 = new MyThread2(o1,o2);原创 2021-03-23 23:03:07 · 56 阅读 · 0 评论 -
阻塞队列——SynchronousQueue
SynchronousQueue:不存储元素的阻塞队列,也即单个元素的队列是阻塞队列的一个实现类,没有容量,与其他的BlockQueue不同,SynchronousQueue是一个不存储元素的BlockQueue,每一个put操作必须等待一个take消费,否则不能消费,也就是说,生产一个消费一个public class HelloGC { public static void main(String[] args) throws InterruptedException { B.原创 2021-03-11 22:37:55 · 147 阅读 · 0 评论 -
ReadWriteLock
读-读能共享读-写不能共享写-写不能共享public class ReadWriteLockDemo { public static void main(String[] args) { MyCache myCache = new MyCache(); for (int i = 1;i<=5;i++){ final int tempInt = i; new Thread(() -> { .原创 2021-02-17 22:43:34 · 91 阅读 · 1 评论 -
Lock
Lock步骤:1、new ReentrantLock()2、lock.lock() 加锁3、finally代码块中解锁 lock.unlock()import java.util.concurrent.locks.Lock;public class ReentrantLock { public static void main(String[] args) { Ticket2 ticket = new Ticket2(); new Thread((.原创 2021-02-17 21:33:53 · 206 阅读 · 1 评论 -
自定义线程池
7个线程池参数:corePoolsize:线程池中的常驻核心线程数当线程池中的线程数目达到 corePoolsize 后,就会把任务放到缓存队列中maximumPoolsize:线程池中能够容纳同时执行的最大线程数此值必须大于等于1keepAliveTime:多余的空闲线程的存活时间。当线程池数量超过corePoolsize时,当空闲时间达到keepAliveTime值时,多余空闲线程会被销直到只剩下corePoolsize个线程为止unit:keepAliveTime的单位thread.原创 2021-02-17 19:44:17 · 86 阅读 · 0 评论 -
线程池执行原理
原创 2021-02-16 22:36:11 · 48 阅读 · 0 评论 -
线程池
1、线程池的使用/** * 第四种使用Java多线程的方式 */public class MyThreadPoolDemo { public static void main(String[] args) { // ExecutorService threadPool = Executors.newFixedThreadPool(5); //一池5个处理线程 // ExecutorService threadPool = Executors.newSingleT原创 2021-02-16 12:44:13 · 61 阅读 · 0 评论 -
volatile
1、volatile不保证原子性public class VolatileDemo { public static void main(String[] args) { Mydata mydata = new Mydata(); for (int i=1;i<=20;i++){ new Thread(new Runnable() { @Override public voi原创 2021-02-15 12:00:37 · 87 阅读 · 1 评论 -
集合不安全
Arraylist线程不安全,add方法没有锁会出现ConcurrentModificationException()异常vector线程安全,但是并发性下降Arraylist出现异常public class test07 { public static void main(String[] args) { List<String> list = new ArrayList<>(); for (int i = 1;i<=30.原创 2021-02-05 20:01:54 · 52 阅读 · 0 评论 -
生产者消费者模式(wait(),notify())
wait()和notify()方法建立在线程安全的基础上两个方法不是thread的方法,是java的方法当调用wait()方法后,当前线程(t线程)立刻进入无限等待状态,并且释放当前线程占有的锁直到调用notify() 方法,才可以让t线程唤醒notify() 方法只会通知,不会释放锁public class ThreadTest11 { public static void main(String[] args) { List list = new ArrayList.原创 2021-02-05 14:41:49 · 116 阅读 · 0 评论 -
Java锁
1、公平锁和非公平锁公平锁:是指多线程按照申请锁的顺序来获取锁非公平锁:是指多个线获取锁的顺序不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获得锁。在高并发的情况下,有可能造成优先级反转或者饥饿的情况。非公平锁如果占有锁失败,则采用公平锁方式ReentrantLock,Synchroized默认采用非公平锁非公平锁的优点在于吞吐量比公平锁大2、可重入锁(递归锁)指的是同一线程外层函数获得锁,内层递归函数仍能获得锁同一线程外层方法获得锁,进入内层方法自动获得锁线程可以进原创 2021-02-05 14:24:39 · 85 阅读 · 0 评论