2017年12月8日
摘要: TheadPoolExector.Worker是EhreadPoolExecutor的内部类,它是一个实现了Runnable接口的类 beforeExecute() 线程执行之前调用 afterExecute() 线程执行之后调用 terminaerd() 线程池退出时候调用 阅读全文
posted @ 2017-12-08 11:14 一个帅哥9527 阅读(2575) 评论(0) 推荐(0) 编辑
  2017年12月7日
摘要: 信号量semaphore 允许多个线程同时访问 读写锁ReadWriteLock 在频繁的读写耗时中,读之间不阻塞 倒计时器CountDownLatch obj = new CountDownLatch(10) 设置预“任务”10次,obj.CountDown();次数减一 obj.await()等 阅读全文
posted @ 2017-12-07 20:29 一个帅哥9527 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 基于AQS的锁(比如ReentrantLock)原理大体是这样:有一个state变量,初始值为0,假设当前线程为A,每当A获取一次锁,status++. 释放一次,status--.锁会记录当前持有的线程。当A线程拥有锁的时候,status>0. B线程尝试获取锁的时候会对这个status有一个CA 阅读全文
posted @ 2017-12-07 17:32 一个帅哥9527 阅读(164) 评论(0) 推荐(0) 编辑
摘要: Integer.valueOf()方法基于减少对象创建次数和节省内存的考虑,缓存了[-128,127]之间的数字。此数字范围内传参则直接返回缓存中的对象。在此之外,直接new出来。 在java中,Integer属于不可变对象,也就是对象一旦创建,就不可以修改,如果你的Integer代表1,那么它就永 阅读全文
posted @ 2017-12-07 17:30 一个帅哥9527 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 将线程转换为守护线程可以通过调用Thread对象的setDaemon(true)方法来实现。在使用守护线程时需要注意一下几点: (1) thread.setDaemon(true)必须在thread.start()之前设置,否则会跑出一个IllegalThreadStateException异常。你 阅读全文
posted @ 2017-12-07 16:19 一个帅哥9527 阅读(152) 评论(0) 推荐(0) 编辑
摘要: notify 和 wait,他们的操作必须有一个公共的锁对象(就相当于下拉框option 的分组一样) notify通知之后,也要等到当前线程运行完成,才会释放锁,wait线程才能开始拿到锁,执行(wait()方法之后的)程序 Object.wait() Object.nitify() Thread 阅读全文
posted @ 2017-12-07 15:52 一个帅哥9527 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 如题:Thread.stop()不要随意调用 ,因为这样会强制中断线程,如果当时线程存数据未终结的时候,stop,会出现脏数据的情况, 如果想要中断,请用变量的形式进行判断 还可以用中断符号表示: public static boolean Thread.interrupted() //判断是否被中 阅读全文
posted @ 2017-12-07 11:45 一个帅哥9527 阅读(639) 评论(0) 推荐(0) 编辑
  2017年11月28日
摘要: 直接上代码: 结果: 使用了parallel() 反而消耗了更多的时间 原因:  iterate生成的是装箱的对象,必须拆箱成数字才能求和; 我们很难把iterate分成多个独立块来并行执行。 可以利用的解决方法: 留意装箱。自动装箱和拆箱操作会大大降低性能。Java 8中有原始类型流(Int 阅读全文
posted @ 2017-11-28 20:51 一个帅哥9527 阅读(284) 评论(0) 推荐(0) 编辑
摘要: 请注意在实际应用时,使用多个ForkJoinPool是没有什么意义的。正是出于这个原因,一般来说把它实例化一次,然后把实例保存在静态字段中,使之成为单例,这样就可以在软件中任何部分方便地重用了。这里创建时用了其默认的无参数构造函数,这意味着想让线程池使用JVM能够使用的所有处理器。更确切地说,该构造 阅读全文
posted @ 2017-11-28 20:47 一个帅哥9527 阅读(605) 评论(0) 推荐(0) 编辑
摘要: 工厂方法 返回类型 用 于toList List<T> 把流中所有项目收集到一个List使用示例:List<Dish> dishes = menuStream.collect(toList());toSet Set<T> 把流中所有项目收集到一个Set,删除重复项使用示例:Set<Dish> dis 阅读全文
posted @ 2017-11-28 17:33 一个帅哥9527 阅读(2523) 评论(0) 推荐(0) 编辑