Java多线程
mq30
研究技术、分享心得
展开
-
Java多线程之线程池(三)
package three.day.thread;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class SingleThreadPool {public static void main(String[] args) {//原创 2013-10-02 17:52:36 · 730 阅读 · 0 评论 -
Java多线程之Exchanger(一)
在Java中,Exchanger用于线程之间将数据换出去String data2 = (String)exchanger.exchange(data1);,这个当然也是线程阻塞的,只要有另外一个线程(同个线程也可以)也换出数据。这时两个线程之间就可以互换数据了。当然线程之间谁先换出数据是无关紧要的,因为换数据操作是阻塞的,只有等到两个线程都换出数据了,才能取得换回数据。package原创 2013-10-02 19:04:57 · 673 阅读 · 0 评论 -
Java多线程之线程池(四)
package three.day.thread;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Semaphore;public class CachedThreadPoolTest {pu原创 2013-10-02 17:58:48 · 679 阅读 · 0 评论 -
Java多线程之线程池(二)
java.util.concurrent包是jdk1.5以后使用的线程库,在jdk1.5之前主要使用java.lang和java.util中的类实现package three.day.thread;import java.util.Random;import java.util.concurrent.ExecutorService;import java.util.conc原创 2013-10-02 17:45:59 · 673 阅读 · 0 评论 -
Java多线程之syncronized(一)
为了理解线程为什么需要同步,我举下面的一个例子来说明:package three.day.thread;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.OutputStream;import java.io.PrintStream;publ原创 2013-10-02 17:07:52 · 859 阅读 · 0 评论 -
Java多线程之Thread(一)
本文主要说明Java中是如何创建一个线程并启动一个线程的package three.day.thread.my;public class ThreadDemo1 {public static void main(String args[]) {new TestThread().run();while (true) {System.out.println("main th原创 2013-10-02 20:28:07 · 740 阅读 · 0 评论 -
Java多线程之Callable接口(一)
这里提一下Callable和Runnable的区别,他们都有一个run方法给没一个线程执行。只是Callable接口的run方法有一个返回值,通过该返回值我们可以知道run的执行情况,有时候,这是很有用的。当然我们也可以定义一个标志变量在Runnable的run方法进行改变,也能知道run方法执行的情况。另外Runnable的一般是作为new Thread(Runnable runna原创 2013-10-02 18:51:29 · 943 阅读 · 0 评论 -
Java多线程之线程池(一)
在使用线程池前,需要了解一下线程池的概念:所谓线程池,就是用来帮我们创建一定数量的线程的助手,而且线程池的线程是可以重用的,比如我代码里面定义了一个大小为13的线程池,当我需要的线程数量小于或等于13时,线程会为我们创建小于或等于13个线程,之所以有可能是小于13是以为线程池里面的线程是可以重用的当我们需要的线程数量大于13,线程也只能重用线程了。像我代码里里面需要23个线程,线程原创 2013-10-02 17:34:49 · 846 阅读 · 0 评论 -
Java多线程值之定时器Timer
package three.day.thread;import java.util.Timer;import java.util.TimerTask;public class TraditionalThread {public static void main(String[] args) {/****/new Timer().schedul原创 2013-10-02 16:37:50 · 893 阅读 · 0 评论 -
Java多线程之CountDownLatch(一)
package three.day.thread;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class CountdownLatchTest {原创 2013-10-02 20:50:05 · 1015 阅读 · 0 评论 -
Java多线程之syncronized(二)
package three.day.thread.my;public class SyncronizedTs {public static void main(String[] args) {Thread tt = new Thread(new ThreadTest());tt.start();ThreadTest t = new ThreadTest();原创 2013-10-02 20:48:23 · 1060 阅读 · 0 评论 -
Java多线程之线程池(五)
本例主要演示如何创建一个用于调度定时任务的线程池package three.day.thread.my;import java.util.Random;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.原创 2013-10-02 20:04:49 · 726 阅读 · 0 评论 -
Java多线程之BlockingQueue(一)
故名思义,BlockingQueue,翻译过来就是阻塞的队列,也是就是该队列的存储数据和取数据操作都是线程阻塞的。这怎么理解呢?queue.put(1);该操作是往队列中存放数据,l而BlockingQueue queue = new ArrayBlockingQueue(1);定义成只可存放一个数据,那么如果该队列中如果原来存放中数据,put操作就是阻塞的,会一直等到别的线程把queue原创 2013-10-02 19:57:31 · 655 阅读 · 0 评论 -
Java多线程之CyclicBarrier(一)
CyclicBarrier,见名思义,循环的障碍。这怎么理解呢?在Java中,这样定义一个障碍:CyclicBarrier cb = new CyclicBarrier(3);,其中参数 3 代表障碍阻挡的线程数,也就是说,障碍物拦截到一个线程,让该线程等待,再拦截下一个线程,也让该线程等待,至到拦截到总共 3 个线程。这时,障碍物才同是让这 3 个线程通过。设置障碍点代码:cb.awai原创 2013-10-02 19:21:40 · 743 阅读 · 0 评论 -
Java多线程之线程锁(一)
在Java中,将对共享资源的操作放置在lock.lock();和lock.unlock();之间,在本代码,在同一时间内,只有一个线程可以获得锁,也就是说只有该线程可以对共享资源进行操作,其他线程只能一直等待。在本例代码中final Business business = new Business(); business 在多个子线程是同一个对象,在多个子线程中针对business的cou原创 2013-10-02 18:28:35 · 893 阅读 · 0 评论 -
Java多线程之信号量(一)
在学习信号量之前,需要了解一下Java中的信号量是怎么回事:在Java中,我们会这样定义一个信号量Semaphore sp = new Semaphore(3);,其中数字 3 代表该信号量掌管的许可证(permits)的数量,在同一时间,最多只有三个线程获得许可证,因为我们定义信号量时声明掌管三个许可证,获得许可证的方法是sp.acquire();,该方法时线程阻塞的,一个线程在请原创 2013-10-02 18:15:27 · 1813 阅读 · 0 评论 -
Java多线程之Condition(一)
在本例中,使用了线程锁Lock和条件变量Condition,线程Lock可以保证一个时间内一个线程先做完自己的事务,另外一个线程才能执行自己事务。加上条件变量Condition后,线程之间就可以相互通信,也就是说,一个线程可以使用condition.signal();发出信号量,说本线程的工作已经做完了,那么另外一个线程也通过条件变量的监听(condition.await();)的线程,就原创 2013-10-02 19:41:26 · 727 阅读 · 0 评论