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<String> { @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<String>(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<String> 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"); } }