线程创建方式
方式总结
1.继承Thread类,重写run();
2.实现Runnable接口,实现run()方法;
3.实现Callable接口,配合FutureTask,可拿到返回值
4.利用线程池,Executors创建线程池
代码展示
1.继承Thread类,重写run();
package com.watero.base.thread; /** * 继承Thread类,创建将多线程 */ public class ThreadTest extends Thread { @Override public void run() { for (int i = 0; i < 100; i++) { if (i % 2 == 0) { System.out.println(Thread.currentThread().getName() + "---" + i); } } } public static void main(String[] args) { Thread.currentThread().setName("主线程"); // Thread.currentThread().setPriority(Thread.MIN_PRIORITY); System.out.println(Thread.currentThread().getPriority()); ThreadTest tt = new ThreadTest(); tt.setName("线程1"); System.out.println(tt.getPriority()); // tt.setPriority(Thread.MAX_PRIORITY); System.out.println(Thread.currentThread().getName()); tt.start(); for (int i = 0; i < 100000; i++) { if (i % 2 == 0) { System.out.println(Thread.currentThread().getName() + "---" + i); } } } }
2.实现Runnable接口,实现run()方法;
class Test implements Runnable {
@Override
public void run() {
for (int i = 0; i < 100; i++) {
if (i % 2 == 0) {
System.out.println(Thread.currentThread().getName() + "---" + i);
}
}
}
public static void main(String[] args) {
Test test = new Test();
Thread t1 = new Thread(test);
t1.start();
}
}
3.实现Callable接口,配合FutureTask,可拿到返回值
package com.watero.base.thread; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.concurrent.FutureTask; /** * 实现Callable接口 创建线程 具有返回值 */ public class CallableTest implements Callable<Integer> { @Override public Integer call() throws Exception { int sum = 0; for (int i = 0; i < 100; i++) { sum += i; } return sum; } } class Demo { public static void main(String[] args) { CallableTest ct = new CallableTest(); FutureTask futureTask = new FutureTask<Integer>(ct); new Thread(futureTask).start(); Integer integer = null; try { integer = (Integer) futureTask.get(); System.out.println(integer); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } }
4.利用线程池,Executors创建线程池
package com.watero.base.thread.pool; import java.util.concurrent.*; /** * 线程池 */ public class ThreadPool { public static void main(String[] args) { ExecutorService executorService = Executors.newFixedThreadPool(10); // executorService.execute(); 适用于Runnable // executorService.submit(); 适用于Callable PrintNumber pn = new PrintNumber(); GetTotal gt = new GetTotal(); executorService.execute(pn); // executorService.execute(pn); Future<Integer> submit = executorService.submit(gt); try { Integer integer = submit.get(); System.out.println(integer); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } // executorService.shutdown();//关闭线程池 } } class PrintNumber implements Runnable { @Override public void run() { for (int i = 0; i < 10; i++) { System.out.println(Thread.currentThread().getName() + " " + i); } } } class GetTotal implements Callable<Integer> { @Override public Integer call() throws Exception { int sum = 0; for (int i = 0; i < 100; i++) { sum += i; } return sum; } }

浙公网安备 33010602011771号