java基础
文章平均质量分 56
skydream_xu
这个作者很懒,什么都没留下…
展开
-
线程池问题记录
场景1 : 一个线程池 核心线程数 0 ,队列100,最大线程数10, 运行过程中发现部门任务运行,部分不运行,原因: 线程池的执行流程: 任务提交核心线程数执行任务;继续来任务放入队列,队列满了,创建新线程(线程数< 最大线程数),然后才是拒绝策略。场景2: 一个线程池 核心线程数2,最大队列10000,最大线程数16,拒绝策略 new 新的临时线程处理;现象 提交的任务时而运行时而不运行。 定位发现一个问题: 任务执行时间长这种概率越高;原因:任务执行时间长,在队列中排...原创 2021-12-04 16:25:59 · 446 阅读 · 0 评论 -
设计模式之创建型模式
生成器模式。 个人理解不是很到位,今后有了新的理解补充原创 2013-11-09 16:45:27 · 465 阅读 · 0 评论 -
设计模式之原型模式
提到原型模式,很好理解就是根据已有的对象,创建出一个属性值相同的对象出来。所以其也属于创建型模式。原型模式:拷贝,所以不得不提,深拷贝和浅拷贝浅拷贝:只负责克隆按值传递的属性。深拷贝:既需要克隆按值传递的属性,也需要克隆应用类型的数据,如果实例属性还有其他对象也需要递归克隆。 克隆模式实现别忘了有一种通过对象流的实现方式原创 2013-11-23 21:58:36 · 569 阅读 · 0 评论 -
设计模式之抽象工厂方法
抽象工厂强调的是产品之间存在关联关系。client为了得到一个产品系统,不需要知道去了解产品之间的关联关系,只需拿到一个工厂对象,使用其创建对象即可。 如果产品之间的关系有了新增,只需新增一个工厂就OK。原创 2013-11-03 21:42:43 · 504 阅读 · 0 评论 -
xml格式之DTD闲扯
作为一个码工,你越来越意识到xml伴随在你左右。而随之而来的合法性验证却成了码奴们枯燥的重复性工作。而xml格式校验可以把非业务相关的检验代码抽离成工具类,成为自己码工工具箱的一部分。xml格式校验有DTD和schemal俩种,本文抛砖引玉先聊点DTD的事,欢迎各位大神吐槽。 内嵌的DTD定义:<!DOCTYPE rootNode [ DTD定义部分]> xm原创 2013-09-28 17:29:58 · 621 阅读 · 0 评论 -
xml schema 初步
dtd固然有其进步之处,但还是存在其局限性。随着计算机技术的发展,一种新的xml验证机制随之诞生-----xml schemal,它解决了dtd许多不如人意的地方。 如: <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.person.skydre原创 2013-10-08 21:08:33 · 504 阅读 · 0 评论 -
jdk5 Exchanger 线程之间数据交换
俩个线程之间交换数据之后继续运行,除了全局静态变量,jdk5提供了Exchanger类来解决这个问题。不多说,直接上例子package com.skydream.thread.exchanger;import java.util.concurrent.Exchanger;public class ExchangerTest { /** * @param args * @th原创 2012-08-22 21:05:21 · 556 阅读 · 0 评论 -
锁 synchronized和Lock
多线程编程带来线程安全问题,而synchronized的出现给我们带来了极大的便利。 那synchronized究竟有什么用呢: 1、当俩个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,同一时间内只能有一个线程执行。另外一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。 2、当一个线程访问object的一个synchr原创 2012-08-16 19:24:27 · 454 阅读 · 0 评论 -
jdk5 CountDownLatch
CountDownLatch能够让所有线程在某一个点阻塞,等待CountDownLatch的Count为0时才继续。package com.skydream.thread.countDownLatch;import java.util.concurrent.CountDownLatch;public class CountDownLatchTest { /** * @param原创 2012-08-19 18:50:53 · 625 阅读 · 0 评论 -
jdk5 CyclicBarrier让聚合
CyclicBarrier允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待。package com.skydream.thread.cyclicBarrier;import java.util.concurrent.BrokenBarrierException;import java.原创 2012-08-18 14:26:33 · 451 阅读 · 0 评论 -
JDK5 Semaphore信号量
Semaphore 在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore 只对可用许可的号码进行计数,并采取相应的行动。Semaphore 通常用于限制可以访问某些资源(物理或逻辑的)的线程数目。 package com.skydream.thread原创 2012-08-18 10:59:13 · 846 阅读 · 0 评论 -
JDK5 condition线程通信
JDK5之后提供了Lock 和 Condition俩个对象完全可以取代synchronized和wait、notify关键字。 下面实现一个例子说明线程通信.(主次线程交替运行10次)。 任务类:package com.skydream.thread.condition;import java.util.concurrent.locks.Condition;import ja原创 2012-08-18 09:19:17 · 1531 阅读 · 0 评论 -
JDK5 读写锁 ReadWriteLock
JDK5了Lock对象。而读写锁就是其中的一个优秀的例子。读写锁:多个读锁不互斥,读锁和写锁互斥,写锁和写锁互斥 面的代码展示了如何利用重入来执行升级缓存后的锁降级(为简单起见,省略了异常处理): class CachedData { Object data; volatile boolean cacheValid; ReentrantReadWriteLock原创 2012-08-16 21:50:20 · 977 阅读 · 0 评论 -
JDK5 如何获取所有线程池的结果再继续执行
JDK5的Callable和Future组合使用可以获取单个线程的执行的结果。那如何获取多个线程的执行结果呢?别急,CompletionService的存在,让这一切变的那么简单。首先CompletionService需要一个Executor线程池为参数构造一个新对象,如 ExecutorService objExecutorService = Executors.newFixed原创 2012-08-15 21:01:30 · 1472 阅读 · 0 评论 -
JDK5 获取线程返回结果
在JDK5之后,提供了Callable和Futrue俩个类。 使用这俩个类可以获取线程的执行结果! 如: public static void main(String[] args) { ExecutorService objExecutorService = Executors.newSingleThreadExecuto原创 2012-08-14 21:51:05 · 487 阅读 · 0 评论 -
ThreadLocal 线程变量
ThreadLocal可以让一个变量成为一个线程变量(每个线程保存一份该变量引用,互不干扰)。 package com.skydream.thread.threadLocal;public class ThreadOwnData { private static ThreadLocal objThreadData = new ThreadLocal(); p原创 2012-08-12 09:48:50 · 372 阅读 · 0 评论 -
java线程笔记
1、Thread和Runnable的区别 Runnable更加面向对象。它把执行者和任务分开独立对象。2、线程通信把互斥、相互通信的逻辑任务放在同一个任务中更容易实现。如:package com.skydream.traditional.thread.communication;public class Task { private boolean flag = t原创 2012-08-11 11:09:45 · 347 阅读 · 0 评论