提交 77e97558 编写于 作者: 武汉红喜's avatar 武汉红喜

sync

上级 a7136e5d
package com.itlong.whatsmars.base.sync;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* Created by shenhongxi on 2016/8/12.
*/
public class CallableTest {
public static void main(String[] args) throws Exception {
ExecutorService pool = Executors.newFixedThreadPool(3);
List<Callable<Void>> subs = new ArrayList<Callable<Void>>();
for (int i = 0; i < 3; i++) {
subs.add(new SubCallable(i));
}
long start = System.currentTimeMillis();
try {
pool.invokeAll(subs);
} finally {
pool.shutdown();
}
System.out.println(System.currentTimeMillis() - start);
System.out.println("Main finished");
}
static class SubCallable implements Callable<Void> {
private int id = -1;
public SubCallable(int id) {
this.id = id;
}
@Override
public Void call() throws Exception {
try {
Thread.sleep(3000);
System.out.println(String
.format("Child Thread %d finished", id));
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
}
}
package com.itlong.whatsmars.base.sync;
import java.util.concurrent.CountDownLatch;
/**
* Created by shenhongxi on 2016/8/12.
*/
public class CountDownLatchTest {
public static void main(String[] args) {
CountDownLatch latch = new CountDownLatch(3);
long start = System.currentTimeMillis();
for (int i = 0; i < 3; i++) {
new Thread(new SubRunnable(i, latch)).start();
}
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(System.currentTimeMillis() - start);
System.out.println("Main finished");
}
static class SubRunnable implements Runnable {
private int id = -1;
private CountDownLatch latch;
SubRunnable(int id, CountDownLatch latch) {
this.id = id;
this.latch = latch;
}
@Override
public void run() {
try {
Thread.sleep(3000);
System.out.println(String
.format("Sub Thread %d finished", id));
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
latch.countDown();
}
}
}
}
package com.itlong.whatsmars.base.sync;
/**
* Created by shenhongxi on 2016/8/12.
* 子线程与主线程是顺序执行的,各子线程之间还是异步的
*/
public class JoinTest {
public static void main(String[] args) throws Exception {
Thread t1 = new Thread(new SubRunnable(0));
Thread t2 = new Thread(new SubRunnable(1));
Thread t3 = new Thread(new SubRunnable(2));
long start = System.currentTimeMillis();
t1.start();
t2.start();
t3.start();
t1.join();
t2.join();
t3.join();
System.out.println(System.currentTimeMillis() - start);
System.out.println("Main finished");
}
static class SubRunnable implements Runnable {
private int id = -1;
SubRunnable(int id) {
this.id = id;
}
@Override
public void run() {
try {
System.out.println("hi, I'm id-" + id);
Thread.sleep(9000);
System.out.println(String
.format("Sub Thread %d finished", id));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册