- 博客(29)
- 资源 (2)
- 收藏
- 关注
原创 可重入锁,锁的公平和非公平
可重入锁表示 假如在一个方法上面有锁,如果在此方法内部也调用了锁,成为递归锁公平和非公平,公平是按照现场申请的先后顺序获得锁,会带来系统额外开销,相当于每一个线程都有一个排队时间,CPU会记性上下文切换,浪费时间非公平是直接拿...
2019-05-11 17:30:02
401
原创 ThreadPoolExecutor JDK提供的线程池
1.工作图2.构造参数解释://public ThreadPoolExecutor(int corePoolSize,//int maximumPoolSize,//long keepAliveTime,//TimeUnit unit,//BlockingQueue<Runnable> workQueue,//RejectedExecutionHandler ha...
2019-05-10 23:50:25
164
原创 java实现自己的多个线程同时访问的读锁
1.写自己的多个读线程的同时访问类package lock.mycountdownlatch;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.AbstractQueuedSynchronizer;import java.util.concurrent.locks.Condition;imp...
2019-04-29 17:14:07
283
原创 JAVA实现自己的独占锁,并可重入
1。写一个自己的锁package lock.mylock;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.AbstractQueuedSynchronizer;import java.util.concurrent.locks.Condition;import java.util.co...
2019-04-29 16:30:01
607
原创 AQS中的acquire方法release方法
AQS中的acquire方法解释,首先调用tryAcquire方法判断当前线程是否拿到锁,没有拿到的话执行addWaiter方法把失败的这个线程打包成一个节点,通过循环CAS机制强行加入到队列的尾部,该方法的返回值会返回这个节点,再打包交给acquireQueued方法,acquireQueued方法会再次自旋尝试拿锁,如果尝试成功则首先找到前一个节点,也就是从锁上下来的节点,并将其脱离...
2019-04-29 16:10:25
955
原创 AtomicStampedReference 演示
、CAS的原理是利用计算机的CAS指令根据旧地址把旧值和新值做一次更新package cas;import java.util.concurrent.atomic.AtomicStampedReference;public class UseAtomicStampedReference { static AtomicStampedReference<String&g...
2019-04-28 12:43:56
167
原创 Callable Future FutureTask 使用例子
package future;import java.util.Random;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.FutureTask;public class UseFuture { /...
2019-04-28 10:12:55
292
原创 Semaphoore 示例
1.第一步,实现一个数据库连接类,注意这里是简写版,需要实现很多方法和导入很多类package DBPoolSemaphoore;import com.mysql.jdbc.*;/***类说明:数据库连接的平庸实现*/public class SqlConnectImpl implements Connection{ /*拿一个数据库连接*/ public...
2019-04-27 23:31:05
127
原创 Cyclicbarrier 控制线程等待和执行的例子
package cyclicbarrier;import java.util.Map;import java.util.Random;import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.Cy...
2019-04-27 22:08:18
242
原创 RecursiveTask 例子
1.先定义一个单线程工具类用来做对比package ForkJoinTest;import java.util.Random;public class MakeArray { public static final int ARRAY_LENGTH= 400000000; public static final int THRESHOLD= 47; ...
2019-04-27 13:24:02
661
原创 RecursiveAction 遍历文件夹
package ForkJoinTest;import java.io.File;import java.util.ArrayList;import java.util.Collection;import java.util.List;import java.util.concurrent.ForkJoinPool;import java.util.concurrent.Recurs...
2019-04-27 13:11:03
388
原创 CountDownLatch并发编程
1.定义一个子弹池类package countdownlatch;public class BulletPool { //总共的子弹数量 public static Integer maxBullet = 40000; // 拿子弹方法,拿了多少子弹就减少多少 public Integer getBullet(Integer bulnum){ ...
2019-04-27 13:07:39
303
原创 RecursiveTask 例子
1、普通单线程累加例子package ForkJoinTest;import java.util.Random;public class MakeArray { public static final int ARRAY_LENGTH= 400000000; public static final int THRESHOLD= 47; public ...
2019-04-27 11:13:19
326
原创 RecursiveAction 用法
package ForkJoinTest;import java.io.File;import java.util.ArrayList;import java.util.Collection;import java.util.List;import java.util.concurrent.ForkJoinPool;import java.util.concurrent.Recurs...
2019-04-27 11:11:52
1806
1
原创 JAVA 简单连接池实现
1.定义连接池类package com.whx.conpool;import java.sql.DriverManager;import java.sql.SQLException;import java.util.LinkedList;import javax.xml.ws.FaultAction;import com.mysql.jdbc.Connection;publ...
2019-04-27 10:32:49
357
原创 notify notifyall sleep join wait 方法解释
wait方法表示当前线程等待状态,一般可以用在syn代码块的中间部分,被唤醒之后执行后面的代码而notifyall和notify 一般被放在 syn代码块的最后1.线程休眠sleep();:线程有优先级,但是我们可以用此方法人为的改变它们的优先级,让线程暂停,它其他线程获得分配空间。用法:Thread.sleep(2000);//休眠两秒2.线程让步yield();就是让出自己的分...
2019-04-27 00:19:24
154
原创 java wait notifyall 例子
1,第一步定义一个学生类public class Student { public Student(int age){ this.age=age; } int age; public int getAge() { return age; } public void setAge(int age) {...
2019-04-26 16:27:42
174
原创 java ThreadLocal例子
package test;public class UseThreadLocal { private static ThreadLocal<Integer> threadLocal = new ThreadLocal<Integer>(){ protected Integer initialValue(){ ...
2019-04-26 11:49:59
319
原创 java volatile关键字使用场景
最轻量的同步volatile 关键字通常使用在一次写,多次读的场景,使线程之间可以实时拿到更新的结果,但多次写却不能保证实时拿到package test;public class ThreadJoinTest { private static class Count extends Thread{ private ThreadJoinTest simplOpe...
2019-04-26 09:58:44
1039
原创 synchronized 使用场景
package test;public class ThreadJoinTest { private static class Count extends Thread{ private ThreadJoinTest simplOper; Object obj = new Object(); publ...
2019-04-25 23:04:07
411
原创 Thread的setDeamon方法
该方法可以把主线程变成守护线程通过设置 setDeamon(true)来实现在守护线程中finally方法不一定起作用
2019-04-25 23:02:09
252
原创 Thread的start方法和run方法的区别
start运行的是当前实例化的Thread对象的线程而run方法是运行在主线程中的start方法只运行一次,而run方法是调用几次运行几次
2019-04-25 16:00:02
156
原创 interrupt方法使用场景
package test;public class NewThread { private static class UseThread extends Thread{ public UseThread(String name){ super(name); } public void run ...
2019-04-25 15:41:53
1247
原创 java Thread类的stop,interrupt,isinterrupt 方法概述以及区别
Thread类正确终止进程的方法应该用 interrupt()方法,而不应该直接使用stop方法interrupt() 方法是对线程发起一个中断信号,但并不是真正的终止一个线程,该方法是给线程标志一个线程中断位,不代表立刻中断,该线程也可以不予理财,所以在JAVA当中线程是协作式的,而不是抢占式isinterrupted() 判断当前线程是否被终断(常用)interrupted(...
2019-04-25 15:08:36
964
原创 JAVA中thread类和Runable的区别
Thread类是JAVA线程的抽象,而Runable是逻辑或任务的一种抽象接口示例:package test;public class NewThread { private static class UseThread extends Thread { public void run(){ super.run(); ...
2019-04-25 14:31:35
195
原创 JAVA多线程概念
并行:同一个CPU同时执行多个任务并发:多个CPU时间轮换机制运行多个任务简单监控线程代码:public static void main(String[] args) { ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); ThreadInfo[]...
2019-04-25 12:13:55
133
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人