(1)繼承Thread累,重寫run()方法;
package com.mythread.test;class MyThread extends Thread{
@Override
public void run() {
System.out.println("Thread body");
}
}
package com.mythread.test;
public class Test {
public static void main(String[] args) {
MyThread my=new MyThread();
my.start();
}
}
(2)實現Runnable接口,實現run()方法;
package com.mythread.test;
class MyThread1 implements Runnable{
@Override
public void run() {
System.out.println("Thread body");
}
}
package com.mythread.test;
public class Test1 {
public static void main(String[] args) {
MyThread1 myThread1=new MyThread1();
Thread t=new Thread(myThread1);
t.start();
}
}
(3)實現接口,重寫call()方法。
package com.mythread.test;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class CallableAndFuture {
public static class CallableTest implements Callable<String>{
@Override
public String call() throws Exception {
// TODO Auto-generated method stub
return "Hello World!";
}
}
public static void main(String[] args) {
ExecutorService thread=Executors.newSingleThreadExecutor();
Future<String> future=thread.submit(new CallableTest());
try{
System.out.println("waiting thread to finish");
System.out.println(future.get());
}catch(Exception e){
e.printStackTrace();
}
}
}