1、继承Thread类,重写run方法
Thread类本质上也是实现了Runnable接口,写一个新类继承Thread类,并重写run方法,然后直接用start()来开始线程。代码如下
package java_IO;
public class myThread extends Thread {
public void run() {
System.out.println("Thread body");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
package java_IO;
public class ThreadTest {
public static void main(String[] args) {
myThread mt=new myThread();
mt.start();
// TODO Auto-generated method stub
}
}
2、实现Runnable接口,并实现该接口的run()方法
之前在同步的文章中就直接用到了,所以不再赘述
3、实现callable接口,重写call()方法
与实现Runnable不同的是可以提供一个返回值,先实现Callable接口
package java_IO;
import java.util.concurrent.Callable;
public class CallableTest implements Callable<String> {
public String call() throws Exception{
return "hello";
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
再利用线程池得到一个线程,并得到返回值
package java_IO;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class ThreadTest {
public static void main(String[] args) {
//myThread mt=new myThread();
//mt.start();
ExecutorService threadpool=Executors.newSingleThreadExecutor();
Future<String> fs=threadpool.submit(new CallableTest());
try {
System.out.println("waiting thread to finish");
System.out.println(fs.get());
} catch (Exception e) {
// TODO: handle exception
}
// TODO Auto-generated method stub
}
}
结果:
waiting thread to finish
hello
4、线程池,并实现Runnable接口
和Thread实现Runnable基本一样,代码如下
package java_IO;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ExecutorServiceTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
int poolNum=5;
ExecutorService es=Executors.newFixedThreadPool(poolNum);
for(int i=0;i<poolNum;i++) {
es.execute(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
// TODO Auto-generated method stub
}
});
}
es.shutdown();
}
}
结果:
pool-1-thread-1
pool-1-thread-4
pool-1-thread-2
pool-1-thread-5
pool-1-thread-3