
多线程
多线程
zhanghe_zht
这个作者很懒,什么都没留下…
展开
-
进程状态,线程状态
Java线程状态6种:New、Runnable、Blocked、Waiting、Time_waiting、Terminated。原创 2023-04-06 14:46:09 · 372 阅读 · 0 评论 -
Java 多线程 线程池处理Runnable请求
Runnable请求没有返回值例如:mysql插入数据继承Runnable的执行类:class InsertMysql implements Runnable{ private String name; private String id; private InsertMysql(String name,String id){ this.name = name; this.id = id; } @Override pu原创 2020-06-08 15:35:58 · 266 阅读 · 0 评论 -
Java 多线程 线程池处理Callable请求
Callable请求有返回值,而Runnable请求没有返回值可以利用Future接收返回值继承Callable的执行类:class GetUserInfo implements Callable{ private String id; GetUserInfo(String id){ this.id = id; } @Override public Object call() throws Exception { UserIn原创 2020-06-08 15:46:01 · 196 阅读 · 0 评论 -
线程池执行流程
任务被提交到线程池,会先判断当前线程数量是否小于corePoolSize,如果小于则创建线程来执行提交的任务,否则将任务放入workQueue队列,如果workQueue满了,则判断当前线程数量是否小于maximumPoolSize,如果小于则创建线程执行任务,否则就会调用handler,以表示线程池拒绝接收任务。...原创 2020-10-16 11:22:44 · 129 阅读 · 0 评论 -
ThreadLocal 遇上线程池的问题及解决办法
ThreadLocal 称为线程本地存储,一般作为静态域使用,它为每一个使用它的线程提供一个其值(value)的副本。通常对数据库连接(Connection)和事务(Transaction)使用线程本地存储。可以简单地将 ThreadLocal 理解成一个容器,它将 value 对象存储在 Map<Thread, T> 域中,即使用当前线程为 key 的一个 Map,ThreadLocal 的 get() 方法从 Map 里取与当前线程相关联的 value 对象。ThreadLocal 的真正转载 2020-10-17 09:21:57 · 379 阅读 · 0 评论 -
Java,线上问题,HashMap多线程死循环
jdk1.7的HashMap有多线程死循环问题。原因,双层Map,外层用了ConcurrentHashMap,但是里层还是HashMap,导致死循环。老代码:ConcurrentHashMap<String, Map<String, Integer>> cacheMap = new ConcurrentHashMap<>();Map<String, Integer> result = new HashMap<>();cacheMap.pu原创 2020-12-08 14:55:10 · 121 阅读 · 0 评论 -
Java多线程,交替打印A/B/C
public class Test { public static void main(String[] args) throws Exception { MyPrinter myPrinter = new MyPrinter(); new Thread(() -> { for (int i=0;i<3;i++){ myPrinter.printA(); }原创 2020-12-08 10:37:27 · 206 阅读 · 0 评论 -
Java多线程,交替打印ABC/123
public class Test { public static void main(String[] args) { Object o = new Object(); new Thread(() -> { synchronized(o){ for (int i=0;i<5;i++) { System.out.println(i);原创 2020-12-07 18:10:08 · 886 阅读 · 0 评论 -
Java多线程,交替打印A/B
public class Test { public static void main(String[] args) { Object o = new Object(); Thread t1 = new Thread(() -> { synchronized(o){ for (int i=0;i<5;i++) { System.out.println("A")原创 2020-12-07 17:40:46 · 459 阅读 · 0 评论 -
synchronized和ReentrantLock区别和底层实现原理
synchronized底层实现原理:方法级:ACC_SYNCHRONIZED代码块:monitorenter、monitorexit对象的对象头中Mark Word 会存储锁信息https://blog.youkuaiyun.com/weixin_38481963/article/details/88384493原创 2020-11-16 17:20:33 · 734 阅读 · 0 评论 -
ThreadPoolExecutor 线程池7个参数,4种拒绝策略
public ThreadPoolExecutor(int corePoolSize,核心线程数int maximumPoolSize,最大线程数long keepAliveTime,线程空闲时最大存活时间TimeUnit unit,最大存活时间单位BlockingQueue workQueue,任务队列ThreadFactory threadFactory,线程工厂RejectedExecutionHandler handler)拒绝策略...原创 2020-10-16 11:19:46 · 198 阅读 · 0 评论 -
多线程创建线程池和CPU核数关系
分IO密集型和CPU密集型一般情况下:Ncpu=cpu核数IO密集型=2NcpuCPU密集型=Ncpu+1公式:Nthreads=NcpuUcpu(1+w/c)Ncpu=CPU核心数Ucpu=cpu使用率,0~1W/C=等待时间与计算时间的比率原创 2020-10-16 10:48:11 · 550 阅读 · 0 评论