Java实战小技巧
文章平均质量分 88
Java实战小技巧
Mars Coder
学无止境
展开
-
Java实战小技巧(十):线程池ThreadPoolExecutor详解
在Java的并发编程中,为了合理控制创建线程的数量和优化资源开销,需要通过线程池提供线程资源,不在业务代码中显示创建线程。另外,线程池最好不要使用Executors去创建,而要使用ThreadPoolExecutor,有助于明确线程池的运行规则,创建符合业务场景需要的线程池,避免资源耗尽的风险。原创 2020-05-15 18:29:11 · 836 阅读 · 0 评论 -
Java实战小技巧(九):并发编程之volatile关键字
在Java并发编程中,关键字volatile和synchronized常用于解决线程安全问题,synchronized是阻塞式同步,在线程竞争激烈的情况下会升级为重量级锁,而volatile则是Java虚拟机提供的最轻量级的同步机制。一个被volatile修饰的变量,能够保证每个线程获取该变量的最新值,从而避免出现数据脏读的现象。原创 2020-05-11 16:15:36 · 310 阅读 · 0 评论 -
Java实战小技巧(八):并发编程之Semaphore类
Semaphore类是java.util.concurrent包的一个并发工具栏,是一个计数信号量,必须由获取它的线程释放,常用于限制访问某些资源的线程数量,例如限流。Semaphore可以控制同时访问的线程个数,通过`acquire()`函数获取一个许可,如果没有就等待。获取许可之后,可通过`release()`函数再释放许可。原创 2020-05-08 11:59:17 · 487 阅读 · 0 评论 -
Java实战小技巧(七):并发编程之CyclicBarrier类
CyclicBarrier类是java.util.concurrent包的一个并发工具类,字面意思就是回环栅栏,就是一个可循环利用的屏障。通过CyclicBarrier可以实现让一组线程阻塞等待,直到某个状态后,再全部同时继续向下执行。叫做回环的原因是当所有等待线程都被释放以后,CyclicBarrier可以重新使用。CyclicBarrier常被用于多线程计算数据,最后合并计算结果的场景。原创 2020-05-07 18:06:23 · 280 阅读 · 0 评论 -
Java实战小技巧(六):并发编程之ReentrantLock类
Java中实现独占锁的方法除了使用关键字synchronized外,还可以使用ReentrantLock类。ReentrantLock和synchronized都是独占锁、重入锁,二者在性能上没有区别,但ReentrantLock的功能更加丰富,使用起来更为灵活,也更适合复杂的并发场景。synchronized的优点是操作简单,一般简单的并发场景使用synchronized就够了。原创 2020-05-06 11:38:47 · 296 阅读 · 0 评论 -
Java实战小技巧(五):并发编程之synchronized关键字
我们在并发编程中,需要考虑线程安全问题,因为多线程之间可能存在共同操作的共享数据,容易出现线程冲突。synchronized关键字可以保证在同一时刻只有一个线程可以执行某个方法或某个代码块,并且可以保证共享资源的可见性。原创 2020-04-29 16:42:13 · 433 阅读 · 0 评论 -
Java实战小技巧(四):并发编程之CountDownLatch类
CountDownLatch是Java 5新增加的一个并发工具类,可以使一个线程等待其他线程执行完毕后再执行。CountDownLatch是通过一个计数器来实现的,计数器的初始值是线程的数量,每当一个线程执行完毕后,计数器的值就-1,当计数器的值为0时,表示所有线程都执行完毕,然后被阻塞的线程就可以继续执行了。CountDownLatch计数器的操作是原子操作,同时只能有一个线程去操作这个计数器。CountDownLatch是一种共享锁。原创 2020-04-28 11:40:54 · 343 阅读 · 0 评论 -
Java实战小技巧(三):检测网络连接状况(代码示例)
检测网络连接状况,测试连接指定的IP和端口能否成功。原创 2019-12-24 16:58:37 · 1455 阅读 · 1 评论 -
Java实战小技巧(二):不同类的对象之间相同字段赋值(代码示例)
将source中与target中类型和名称相同的属性值赋值给对应的entity的属性。原创 2019-12-24 13:36:27 · 5047 阅读 · 0 评论 -
Java实战小技巧(一):线程池ScheduledThreadPoolExecutor应用
ScheduledThreadPoolExecutor 继承自 ThreadPoolExecutor,它主要用来在给定的延迟之后运行任务,或者定期执行任务。在实际应用中,可将ScheduledThreadPoolExecutor用于服务端异步处理HTTP请求,避免高并发导致阻塞。原创 2019-10-23 13:23:31 · 719 阅读 · 0 评论