1)继承Thread类创建线程
如图所示:
//继承Thread类
class Aclass extends Thread{//输出100以内的偶数@Overridepublic void run() {for (int i = 1; i <=100; i++) {System.out.println(getName()+":"+i);}}
}
测试:
Thread t1 = new Aclass();t1.setName("线程A");t1.start();
输出:

2)实现Runnable接口,然后把Runnable接口的实现类作为参数,丢给Thread的构造器,创建Thread对象
如图:
//实现Runnable接口
class Bclass implements Runnable{//输出100以内的偶数@Overridepublic void run() {for (int i = 1; i <=100; i++) {if (i%2!=0){System.out.println(Thread.currentThread().getName()+":"+i);}}}
}
测试:
Runnable r = new Bclass();Thread t2 = new Thread(r);t2.setName("线程B");t2.start();
输出:

3)实现Callable接口的方式创建线程
代码:
class Cclass implements Callable{@Overridepublic Object call() throws Exception {int sum = 0;for (int i = 1; i <=100; i++) {if (i%2==0){System.out.println(Thread.currentThread().getName()+":"+i);sum+=i;}}return sum;}
}
//创建Callable接口的实现类对象Cclass cclass = new Cclass();//将此Callable接口的实现类对象作为参数传递到FutureTask构造器中,创建FutureTask对象FutureTask futureTask = new FutureTask(cclass);//将FutureTask的对象作为参数传递Thread构造器中,创建Thread对象Thread t3 = new Thread(futureTask);t3.setName("线程C");t3.start();
输出:

4)创建线程池的方式创建线程(两种)
一种是适合Runnable方式的execute方法
另外一种是适合Callable方式的submit方法
class A implements Runnable{//输出100以内的偶数@Overridepublic void run() {for (int i = 1; i <=100; i++) {if (i%2==0){System.out.println(Thread.currentThread().getName()+":"+i);}}}
}class B implements Runnable{//输出100以内的奇数@Overridepublic void run() {for (int i = 1; i <=100; i++) {if (i%2!=0){System.out.println(Thread.currentThread().getName()+":"+i);}}}
}
ExecutorService service = Executors.newFixedThreadPool(10);//System.out.println(service.getClass());ThreadPoolExecutor service1 = (ThreadPoolExecutor) service;service1.setCorePoolSize(8);service.execute(new A());//适合适用于Runnable//service.shutdown();//关闭线程池service.submit(new B());//适合适用于Callableservice.shutdown();
测试:

以上就是创建线程的四种方式。


















