创建线程的多种方式
Posted quyangyang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建线程的多种方式相关的知识,希望对你有一定的参考价值。
1 public class Demo1 extends Thread{
2
3 @Override
4 public void run() {
5 while(!interrupted()) {
6 System.out.println(getName()+"线程执行了");
7 try {
8 Thread.sleep(200);
9 } catch (InterruptedException e) {
10 // TODO Auto-generated catch block
11 e.printStackTrace();
12 }
13
14 }
15 }
16
17 public static void main(String[] args) {
18 Demo1 d1 = new Demo1();
19 Demo1 d2 = new Demo1();
20
21 d1.start();
22 d2.start();
23
24 d1.interrupt();
25
26 }
27
28
29 }
1 public class Demo2 implements Runnable {
2
3 @Override
4 public void run() {
5 while(true) {
6 System.out.println("thread running ...");
7 }
8
9 }
10
11
12 public static void main(String[] args) {
13 Thread thread = new Thread(new Demo2());
14 thread.start();
15 }
16
17
18 }
public class Demo3 {
public static void main(String[] args) {
//继承thread类子类方式
/*new Thread() {
public void run() {
System.out.println("thread start ...");
};
}.start();
*/
//实现runnable接口
/* new Thread(new Runnable() {
public void run() {
System.out.println("thread start ...");
}
}).start();*/
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("runnable");
}
}) {
@Override
public void run() {
System.out.println("sub");
}
}.start();
//sub 重写了父类的run方法
}
1 public class Demo4 implements Callable<Integer>{ //指定返回类型
2
3 public static void main(String[] args) throws Exception {
4 Demo4 d = new Demo4();
5 //class FutureTask<V> implements Runnables RunnableFuture<V>
6 // --- interface RunnableFuture<V> extends Runnable,Future<V> 对线程任务进行封装
7
8 FutureTask<Integer> task = new FutureTask<>(d);
9
10 Thread t = new Thread(task);
11 t.start();
12
13 Integer result = task.get();
14 System.out.println("线程执行结果为:"+result);
15 }
16
17 @Override
18 public Integer call() throws Exception {
19 System.out.println("正在进行紧张计算");
20 Thread.sleep(3000);
21 return 1;
22 }
23
24 }
1 public class Demo5 {
2
3
4 public static void main(String[] args) {
5
6 Timer timer = new Timer();
7
8 // abstract class TimerTask implements Runnable
9 timer.schedule(new TimerTask() {
10
11 @Override
12 public void run() {
13 //实现定时任务
14 System.out.println("timertask is running");
15 }
16 }, 0, 1000);
17 //java.util.Timer.schedule(TimerTask task, long delay, long period)
18
19 }
20
21 }
1 public class Demo6 {
2
3 public static void main(String[] args) {
4
5 Executor threadPool = Executors.newFixedThreadPool(10);//固定容量的线程池
6
7 for(int i = 0;i<10; i++ ) {
8 threadPool.execute(new Runnable() {
9
10 @Override
11 public void run() {
12 System.out.println(Thread.currentThread().getName());
13 }
14 });
15 }
16 }
17 }
1 public class Demo7 {
2
3 public static void main(String[] args) {
4 List<Integer> values = Arrays.asList(10,20,30,40); // Arrays.asList(array):将数组array转化为List
5 int res = new Demo7().add(values);
6 System.out.println("计算结果为:"+res);
7 }
8 public int add(List<Integer> values) {
9 values.parallelStream().forEach(System.out :: println);
10 return 0;
11
12 // 30
13 // 20
14 // 10
15 // 40
16 // 计算结果为:0
17 //parallelStream 并行执行
18 // return values.parallelStream().mapToInt(a -> a).sum();
19
20 }
21
22 }
新建spring boot工程,pom 中引入spring-context依赖
//Config.java
@Configuration
@ComponentScan("com.roocon.thread.t1")
@EnableAsync
public class Config {
}
//DemoService
@Service
public class DemoService {
@Async
public void a() {
while(true) {
System.out.println("a");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Async
public void b() {
while(true) {
System.out.println("b");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public class Main {
public static void main(String[] args) {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(Config.class);
DemoService ds = ac.getBean(DemoService.class);
ds.a();
ds.b();
}
}
以上是关于创建线程的多种方式的主要内容,如果未能解决你的问题,请参考以下文章
newCacheThreadPool()newFixedThreadPool()newScheduledThreadPool()newSingleThreadExecutor()自定义线程池(代码片段