Java 线程
tuobana123
从事J2EE开发,熟悉Spring Framework,Hibernate,Mybatis等开源java框架。
展开
-
java concurrent—runnable和callable
在Java5之后,任务分两类:一类是实现了Runnable接口的类,一类是实现了Callable接口的类。两者都可以被ExecutorService执行,但是Runnable任务没有返回值,而Callable任务有返回值。并且Callable的call()方法只能通过ExecutorService的submit(Callable task) 方法来执行,并且返回一个 Future,是表示任务等待原创 2013-07-10 19:58:19 · 889 阅读 · 0 评论 -
java semaphore
java基于semaphore方式实现对资源的并发访问,也是多线程同步的一种方式,它一般是用于实现对多个资源副本的并发访问控制,而synchronized,lock等同步方式不同则用于针对一个资源的并发访问控制,也就是说资源只允许一个线程同时访问,而semaphore则可以控制某几个线程同时访问资源。 当然semaphore它也有一个变种,即二进制信号量,它的作用实际上和synchronized和原创 2015-10-30 11:50:10 · 458 阅读 · 0 评论 -
java thread join
java多线程编程join的作用是等待线程结束,这个作用可以产生很多特定的场景。 1)A线程中调用B线程的join方法,那么A线程需要等待B线程执行完成后才能完成 2)主线程中依次调用A线程的join方法,B线程的join方法,可以保证A,B线程顺序执行;当主线程需要等待多个线程完成后再继续执行时,join方法可能会产生迷惑作用,虽然这个时候主线程等到了多个线程的完成,但是这时多个线程的执行并不原创 2016-03-08 00:03:07 · 795 阅读 · 0 评论 -
java CountDownLatch 多线程文件搜索
基于多线程搜索文件,并且将最终的结果进行打印。这里使用了CountDownLatch线程协作机制,主线程等待多个搜索线程完成,并对最终结果进行打印。具体例子如下:原创 2016-03-08 00:18:17 · 1277 阅读 · 0 评论 -
java ScheduledExecutorService 使用
ScheduledExecutorService的作用是任务的调动和时间密切相关。最常用的两个方法分别是ScheduleAtFixedRate 和 ScheduleWithFixedDelay,这个两个方法在使用上还是有一些差别的。 ScheduleAtFixedRate,它是线程的执行以一个固定的频率执行,但是需要注意的是,当线程的执行频率快于线程的执行速度,这时下一个线程的执行仍然需要等待当前原创 2016-03-08 15:32:34 · 786 阅读 · 0 评论 -
java 线程中断
java并没有提供一种直接中断或者停止线程的方法,实际上我们说的线程中断或者取消都是基于一种协作的机制来实现的,所谓协作即调用中断或者取消方法后,线程会通过检测某个状态位来决定是否要退出正在执行的工作,从而来停止线程的执行。应该说线程中断是没有一种统一的处理方案的,正确的线程中断处理方案都需要考虑线程的具体使用的情景。另外线程中断都不是一个立即执行的动作,前面说了是一种协作机制。下面说说线程的几种使原创 2016-03-25 14:34:11 · 690 阅读 · 0 评论 -
java 线程中unchecked exception处理
Thread的run方法是不抛出任何检查型异常(checked exception)的,但是它自身却可能因为一个异常而被终止,导致这个线程的终结。最麻烦的是,在线程中抛出的异常即使使用try…catch也无法截获,因此可能导致一些问题出现,比如异常的时候无法回收一些系统资源,或者没有关闭当前的连接等等。JDK5.0之前,不能为单独的Thread设置UncaughtExceptionHandler,也原创 2015-10-27 16:54:28 · 1771 阅读 · 0 评论 -
java 实现3个线程 依次打印ABC,并且循环10次
网上看到一个题目,要求3个线程依次打印ABC,并且循环10次,网上的版本比较多,这个是我实现的一个版本,共用一个Runnable对象,有点小缺陷,无法关联线程的名字。package com.mythread.test;import java.util.concurrent.atomic.AtomicInteger;public class TestAsynTreadXunlei {原创 2013-07-25 15:03:49 · 11493 阅读 · 5 评论 -
java lock condition
针对线程的同步,java提供了很多种方法,比如synchronized关键字,lock方法等,都可以实现对临界区资源的访问保护,防止多个线程并发操作临界区资源而导致的问题。有的时候,光有同步还不够,还需要加入线程之间的通信机制,比如典型的消费者生产者问题。这里,基于lock+condition(条件锁)来实现典型的消费者生产者问题,例子是一个环形数组,当数组满或者空的时候就等待,当非满或者非空就通知原创 2015-10-30 11:23:43 · 525 阅读 · 0 评论 -
java ThreadGroup
Java并发API里有个方法是把线程分组的,这个方法允许我们按线程组作为一个单位来处理。可以让一些线程做着同样的任务,无论多少线程还在运行,他们都可以以组为单位中断。 下面的例子,展示了一个文件搜索功能,一个线程组搜索一个文件,组中每个线程的基础目录不一样,但搜索的文件名相同,当一个线程搜索到了该文件,就中断其他线程的搜索。通过这个例子的学校,主要是把线程组中线程的unchecked异常处理机制,原创 2015-10-28 14:33:28 · 761 阅读 · 0 评论 -
java synchronized
1.synchronized是对类的当前实例进行加锁,防止其他线程同时访问该类的该实例的所有synchronized块,注意这里是“类的当前实例”,类的两个不同实例就没有这种约束了。那么static synchronized恰好就是要控制类的所有实例的访问了,static synchronized是限制线程同时访问jvm中该类的所有实例同时访问对应的代码快。实际上,在类中某方法或某代码原创 2013-07-03 17:00:47 · 660 阅读 · 1 评论 -
Java多线程实现文件copy
package com.file.study;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.FilenameFilter;import java.sql.Timestamp;public class DirClass { publi原创 2013-04-23 17:02:32 · 961 阅读 · 0 评论 -
java threadlocal
ThreadLocal通过一个Map来为每个线程都持有一个变量副本。这个map以当前线程为key。与synchronized相比,ThreadLocal是以空间换时间的策略来实现多线程程序。Synchronized和ThreadLocal关系ThreadLocal以空间换取时间,提供了一种非常简便的多线程实现方式。因为多个线程并发访问无需进行等待,所以使用ThreadLocal会获得更大的性能。虽原创 2013-06-17 19:00:52 · 695 阅读 · 0 评论 -
java多线程编程基础(配合实例)
1、多线程的实现在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口。1)直接继承Thread的类来说,代码大致框架是:class 类名 extends Thread{方法1;方法2;…public void run(){// other code…}属性1;属性2;…}class hello原创 2013-07-03 16:21:45 · 3070 阅读 · 0 评论 -
java concurrent—semphore
一个计数信号量,从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个acquire,然后再获取该许可。每个release添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore 只对可用许可的号码进行计数,并采取相应的行动。Semaphore 通常用于限制可以访问某些资源(物理或逻辑的)的线程数目,示例如下:package com.myt原创 2013-07-10 19:18:41 · 805 阅读 · 0 评论 -
java 多线程编程
题目:先子线程打印10次,然后回到主线程打印5次,如此循环20次。目的:理解并实践线程同步的方法。package com.mythread.test;public class ExeThread2 { private static boolean main = false; public static void main(String argv[]) { Thre原创 2013-09-03 20:03:03 · 1357 阅读 · 0 评论 -
java concurrent—Futrue
Callable 接口类似于 Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的。但是Runnable 不会返回结果,并且无法抛出经过检查的异常;Callable可以返回结果,并且能抛出异常。Future 表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并获取计算的结果。计算完成后只能使用 get 方法来获取结果,计算完成前get方法将被阻塞原创 2013-07-15 19:31:27 · 688 阅读 · 0 评论 -
java concurrent—CyclicBarrier
CyclicBarrier一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。使用场景如:需要所有的子任务都完成时,才执行主任务,这个时候就可以原创 2013-07-15 18:46:07 · 903 阅读 · 0 评论 -
java ThreadPoolExecutor 自定义线程池优势
java并发线程池建议还是多多使用ThreadPoolExecutor的构造函数来设置自定义的线程池,先来看看这个构造函数的参数列表。 /** * Creates a new {@code ThreadPoolExecutor} with the given initial * parameters. * * @param corePoolSize th原创 2016-03-08 16:51:51 · 3849 阅读 · 0 评论