1.wait和notify,notifyAll:wait和notify,notifyAll是Object类方法,因为等待和唤醒必须是同一个锁,不可以对不同锁中的线程进行唤醒,而锁可以是任意对象,所以可以被任意对象调用的方法,定义在Object基类中。wait()方法:对此对象调用wait方法导致本线...
分类:
编程语言 时间:
2014-08-10 01:27:39
阅读次数:
643
Java多线程编程是非常考验一个程序员水平的。传统的WEB程序中,因为框架提供了太多的健壮性、并发性、可靠性的支持,所以我们都是将所有的注意力放到了业务实现上。我们只是按照业务逻辑的要求,不停的积累自己的代码。因为知识,或者是经验的限制,经常出现了问题而不自知。例如,某些比较原始的项目中,并没有使用Spring等相对来说比较灵活健壮的框架。而是仅仅使用Servlet来作为服务端的实现方式。
...
分类:
编程语言 时间:
2014-08-09 21:32:59
阅读次数:
263
死锁:是两个或者两个以上的线程被无限的阻塞,线程之间互相等待所需资源。线程死锁产生的条件:当两个线程相互调用Join()方法。当两个线程使用嵌套的同步代码块的时候,一个线程占用了另一个线程的锁,互相等待阻塞,就有可能产生死锁。下面看代码:代码1:死锁的案例package com.lp.ecjtu.T...
分类:
编程语言 时间:
2014-08-09 13:16:08
阅读次数:
267
1.验证同步函数使用的锁----普通方法使用的锁思路:创建两个线程,同时操作同一个资源,还是用卖票的例子来验证。创建好两个线程t1,t2,t1线程走同步代码块操作tickets,t2,线程走同步函数封装的代码操作tickets,同步代码块中的锁我们可以指定。假设我们事先不知道同步函数用的是什么锁;如...
分类:
编程语言 时间:
2014-08-08 23:50:26
阅读次数:
396
@Test public void testRunBatchClient() { long start = System.currentTimeMillis(); runBatchClient(30); long end = System.cu...
分类:
编程语言 时间:
2014-08-08 12:02:25
阅读次数:
210
1.java实现线程的方法;
1.实现Runnable接口,重写run方法,通过Thread的start方法启动线程。这种方法可以实现资源的共享
2.继承Thread类,重写run方法
推荐使用Runnable接口实现多线程。
2.线程的状态
创建
开始
就绪
运行
阻塞
终止
3.线程控制的基本方法
isA...
分类:
编程语言 时间:
2014-08-08 02:06:15
阅读次数:
358
在JDK中任务就是一个Runnable或Callable对象,线程是一个Thread对象。任务运行在单个线程或者是线程池ExecutorService中。我们知道,让线程死亡的方式有2种:正常完成和未捕获的异常。如果想让任务结束,也是只有这2种方式。...
分类:
编程语言 时间:
2014-08-07 23:17:24
阅读次数:
294
这里举个例子讲解,同步synchronized在什么地方加,以及同步的前提:* 1.必须要有两个以上的线程,才需要同步。* 2.必须是多个线程使用同一个锁。* 3.必须保证同步中只能有一个线程在运行,锁加在哪一块代码那么我们要思考的地方有:1.知道我们写的哪些是多线程代码 2.明确共享数据 3.明确...
分类:
编程语言 时间:
2014-08-07 00:35:07
阅读次数:
260
上一节售票系统中我们发现,打印出了错票,0,-1,出现了多线程安全问题。我们分析为什么会发生多线程安全问题?看下面线程的主要代码:@Override public void run() { // TODO Auto-generated method stub ...
分类:
编程语言 时间:
2014-08-06 21:47:52
阅读次数:
301
多线程主要作用是充分利用Cpu,而不在于它的乱序性。本Demo不讲它竞争什么的、之前看过乱序打印ABC的例子什么的,那些有意义吗?
本Demo 是多线程打印文件夹下的文件,主要实现是用数组存放文件,一个游标遍历。
我们需要考虑在什么时候加互斥访问,本例用synchronized .
先考虑单线程的流程:客户端启动-->读取文件下的文件放到数组(IO)--> 取游标打印 ,游标加1...
分类:
编程语言 时间:
2014-08-06 19:25:02
阅读次数:
314