1、继承Thread类,实现“T1”线程和主线程交替之行
public class MyTest1 extends Thread{
@Override
public void run() {
for (int i = 0; i <10 ; i++) {
try {
TimeUnit.MILLISECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("T1");
}
}
public static void main(String[] args) {
new MyTest1().start();
for (int i = 0; i <10 ; i++) {
try {
TimeUnit.MILLISECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("main");
}
}
}
2、实现Runable接口
public class MyTest2 implements Runnable{
@Override
public void run() {
for (int i = 0; i <10 ; i++) {
try {
TimeUnit.MILLISECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("T1");
}
}
public static void main(String[] args) {
new Thread(new MyTest2()).start();
for (int i = 0; i <10 ; i++) {
try {
TimeUnit.MILLISECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("main");
}
}
}
3、实现Callable接口
public class MyTest3 implements Callable{ @Override public String call() throws Exception { for (int i = 0; i <10 ; i++) { try { TimeUnit.MILLISECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("T1"); } return "success"; } public static void main(String[] args) throws ExecutionException, InterruptedException { Thread t = new Thread(new FutureTask (new MyTest3())); t.start(); for (int i = 0; i <10 ; i++) { try { TimeUnit.MILLISECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("main"); } } }
4、利用lambda表达式
public static void main(String[] args) throws ExecutionException, InterruptedException {
new Thread(()->{
for (int i = 0; i <10 ; i++) {
try {
TimeUnit.MILLISECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("T1");
}
}).start();
for (int i = 0; i <10 ; i++) {
try {
TimeUnit.MILLISECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("main");
}
}
5、利用线程池
public static void main(String[] args) throws ExecutionException, InterruptedException {
ExecutorService service = Executors.newCachedThreadPool();
Future f = service.submit(new MyTest3());
String s = f.get();
//打印出callable的返回值
System.out.println(s);
service.shutdown();
for (int i = 0; i <10 ; i++) {
try {
TimeUnit.MILLISECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("main");
}
} 


