上一页 1 ··· 3 4 5 6 7 8 9 10 11 12 下一页
为了解决对共享存储区的访问冲突,Java 引入了同步机制。但显然不够,因为在任意时刻所要求的资源不一定已经准备好了被访问,反过来,同一时刻准备好了的资源也可能不止一个。为解决访问控制问题,Java 引入阻塞机制。阻塞指的是暂停一个Java线程同步的执行以等待某个条件发生(如某资源就绪)。sleep():允许指定以毫秒为单位的一段时间作为参数,它使得线程在指定的时间内进入阻塞状态,不能得到CPU 时 间,指定的时间一过,线程重新进入可执行状态。典型地,sleep() 被用在等待某个资源就绪的情形:测试发现条件不满足后,让线程阻塞一段时间后重新 测试,直到条件满足为止。suspend()& Read More
posted @ 2012-06-13 14:21 技术草根女 Views(2698) Comments(1) Diggs(0) Edit
class Object{element;public synchronized void method(){}}【描述】线程1,对synchronized(element)访问,线程2,对synchronized A()方法进行访问。【结论】获取成员变量的锁,与获取对象的锁,是独立的。并不存在说,要获取对象的锁,就要求成员变量或神马的都没有锁存在了。即,锁成员变量与锁整个对象是独立的。【描述】在前面描述的基础上,如果method()方法内部,又需要对element()同步访问。【结论】那就得等了,等先前对element的锁释放。class Object extends Thread{publ Read More
posted @ 2012-06-13 14:11 技术草根女 Views(3884) Comments(1) Diggs(0) Edit
javac TestRunTime.javajava TestRunTime hostname // 执行“hostname”Linux命令即可看到输出public class TestRunTime { public static void main(String[] args) throws IOException, InterruptedException { String cmd = ""; if(args == null || args.length == 0){ System.out.println("请输入命... Read More
posted @ 2012-06-12 13:24 技术草根女 Views(14228) Comments(1) Diggs(2) Edit
如何中断一个正在执行的线程?线程中断,意味着该线程在完成任务之前停止其正在进行的一切,有效地中止其当前的操作。那么,线程接下为是死亡、还是等待新的任务,或是继续运行至下一步。【方法一】使用共享变量Shared Variable1. 需要线程“周期性”的核查这一变量,然后有秩序的中止任务。2. 将共享变量定义成“volatile”型,或将它的一切方法封入“synchronized”块或方法中。3. 局限性:如果线程被阻塞,便不能核查共享变量,该方法将失效。例如,Object.wait(), ServerSocket.accept()和DatagramSocket.receive(),等等。pub Read More
posted @ 2012-06-11 13:33 技术草根女 Views(543) Comments(0) Diggs(0) Edit
DecimalFormat a = new DecimalFormat("#,###.000"); System.out.println(a.format(Long.MAX_VALUE)); System.out.println(a.format(Long.MIN_VALUE)); Read More
posted @ 2012-06-05 15:41 技术草根女 Views(241) Comments(0) Diggs(0) Edit
public class SimpleQuartzJob implements Job{ @Override public void execute(JobExecutionContext arg0) throws JobExecutionException { String key = "hello1"; String value = (String)arg0.getJobDetail().getJobDataMap().get(key); System.out.println("key is " + key + ", value is .. Read More
posted @ 2012-06-05 14:17 技术草根女 Views(510) Comments(0) Diggs(0) Edit
总的来说,优先级:Quartz > ScheduledThreadPoolExecutor > Timer方式调度方式线程方式异常处理Timer(不建议使用) 基于绝对时间,因此任务对系统时间的改变是敏感的用单线程方式来执行所有的TimerTask,如果某个TimerTask很耗时则会影响到其他TimerTask的执行不会捕获由TimerTask抛出的未检查异常,故当有异常抛出时,Timer会终止,导致未执行完的TimerTask不再执行ScheduledThreadPoolExecutor基于相对时间。这这同时也意味着,没法实现“请在每天00:05帮我执行myTask”这样的需求 Read More
posted @ 2012-06-04 23:19 技术草根女 Views(589) Comments(1) Diggs(1) Edit
Junit4之前Junit4【1】类public class xxxUnitTest extends TestCase无需扩展【2】方法public void testxxx();@Test【3】setUp() & tearDown()在每个测试方法前、后均会被调用;protected void setUp(){} // 初始化protected void tearDown(){} // 撤销@Before @After 被这两者标识的方法分别只能有一个。 【4】各种断言assert()assertEquals()assertTrue()…... Read More
posted @ 2012-05-31 15:18 技术草根女 Views(449) Comments(0) Diggs(0) Edit
【1】典型应用CountDownLatch begin = new CountDownLatch(1);begin.countDown(); //锁计数减1begin.await(); //阻塞等,直到begin为0,或当前线程被其他线程中断http://man.ddvip.com/program/java_api_zh/java/util/concurrent/CountDownLatch.html【2】Thread, 几个一直然不清的方法以下为Thread的自带方法:interrupt() 中断线程.Thread.interrupt()方法,不会中断一个正在运行的线程。这一方法实际上完成的 Read More
posted @ 2012-05-28 14:47 技术草根女 Views(1715) Comments(0) Diggs(0) Edit
[1] SimpleFactory简单工厂,倡导面向接口编程,接口提供能力/服务出去。例子:根据某个输入,判断究竟建立哪个运算类。可以想象,简单工厂类中有很多if-else语句。如果要加一个新的运算类,那么还要在简单工厂类中新加一个if-分支,这样不够优雅哦,破坏了类的开放-封闭原则。对于客户端来说,要做的就是给简单工厂类一个输入,然后就获取了运算类,可以进行计算。[2] Factory与[1]对比,一个简单工厂类 —> 一个接口+N类对应的工厂。这样,增加一个新的运算类,只要新建该运算类相应工厂(实现抽象工厂),没有破坏哪个类。对于客户端来说,就是新建一个运算类工厂,然后创造出相应的运 Read More
posted @ 2012-05-27 21:57 技术草根女 Views(277) Comments(0) Diggs(0) Edit
上一页 1 ··· 3 4 5 6 7 8 9 10 11 12 下一页