1,继承Thread类,重写run方法;
public class Thread01 extends Thread{
public Thread01(){
}
public void run(){
System.out.println(Thread.currentThread().getName());
}
public static void main(String[] args){
Thread01 thread01 = new Thread01();
thread01.setName("继承Thread类的线程1");
thread01.start();
System.out.println(Thread.currentThread().toString());
}
}
2,实现Runnable接口,重写run方法;
public class Thread02 {
public static void main(String[] args){
System.out.println(Thread.currentThread().getName());
Thread t2 = new Thread(new MyThread02());
t2.start();
}
}
class MyThread02 implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"2--实现Runnable接口的线程实现方式");
}
}
3,实现Callable接口通过FutureTask包装器来创建Thread线程;
创建 Callable 接口的实现类,并实现 call() 方法,该 call() 方法将作为线程执行体,并且有返回值。
创建 Callable 实现类的实例,使用 FutureTask 类来包装 Callable 对象,该 FutureTask 对象封装了该 Callable 对象的 call() 方法的返回值。
使用 FutureTask 对象作为 Thread 对象的 target 创建并启动新线程。
调用 FutureTask 对象的 get() 方法来获得子线程执行结束后的返回值。
public class CallableThreadTest implements Callable<Integer> { public static void main(String[] args)
{
CallableThreadTest ctt = new CallableThreadTest();
FutureTask<Integer> ft = new FutureTask<>(ctt);
for(int i = 0;i < 100;i++)
{
System.out.println(Thread.currentThread().getName()+" 的循环变量i的值"+i);
if(i==20)
{
new Thread(ft,"有返回值的线程").start();
}
}
try
{
System.out.println("子线程的返回值:"+ft.get());
} catch (InterruptedException e)
{
e.printStackTrace();
} catch (ExecutionException e)
{
e.printStackTrace();
}
} @Override
public Integer call() throws Exception
{
int i = 0;
for(;i<100;i++)
{
System.out.println(Thread.currentThread().getName()+" "+i);
}
return i;
} }
4,通过线程池创建线程;
public class Thread04 {
private static int POOL_NUM =10;
public static void main(String[] args)throws InterruptedException {
ExecutorService executorService = Executors.newFixedThreadPool(5);
for (int i = 0; i < POOL_NUM; i++) {
RunnableThread runnable =new RunnableThread ();
executorService.execute(runnable);
}
executorService.shutdown();
}
}
class RunnableThread implements Runnable{
@Override
public void run()
{
System.out.println("4--通过线程池创建的线程:" + Thread.currentThread().getName() + " ");
}
}
网友评论