java多线程的3种写法
1.Thread
/** * */ package testJava2.thread; /** * @author xxx.sjtu * @function * @date 2017年5月17日 * @version */ public class FirstThreadTest extends Thread { int i = 0; public FirstThreadTest(int i) { super(); this.i = i; } public FirstThreadTest() { super(); // TODO Auto-generated constructor stub } public FirstThreadTest(Runnable target, String name) { super(target, name); // TODO Auto-generated constructor stub } public FirstThreadTest(Runnable target) { super(target); // TODO Auto-generated constructor stub } public FirstThreadTest(String name) { super(name); // TODO Auto-generated constructor stub } public FirstThreadTest(ThreadGroup group, Runnable target, String name, long stackSize) { super(group, target, name, stackSize); // TODO Auto-generated constructor stub } public FirstThreadTest(ThreadGroup group, Runnable target, String name) { super(group, target, name); // TODO Auto-generated constructor stub } public FirstThreadTest(ThreadGroup group, Runnable target) { super(group, target); // TODO Auto-generated constructor stub } public FirstThreadTest(ThreadGroup group, String name) { super(group, name); // TODO Auto-generated constructor stub } // 重写run方法,run方法的方法体就是现场执行体 public void run() { //当前线程: this System.out.println(this.getName() + " " + i); } public static void main(String[] args) { System.out.println(Thread.currentThread().getName()); new FirstThreadTest(888).start(); } }
2.Runnable
/** * */ package testJava2.thread; /** * @author xxx.sjtu * @function * @date 2017年5月17日 * @version */ public class RunnableThreadTest implements Runnable { private int i; public RunnableThreadTest() { super(); // TODO Auto-generated constructor stub } public RunnableThreadTest(int i) { super(); this.i = i; } @Override public void run() { //当前线程: Thread.currentThread() System.out.println(Thread.currentThread().getName() + " " + i); } public static void main(String[] args) { System.out.println(Thread.currentThread().getName()); RunnableThreadTest rtt = new RunnableThreadTest(999); new Thread(rtt, "新线程1").start(); } }
3.Callable
/** * */ package testJava2.thread; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; /** * @author xxx.sjtu * @function * @date 2017年5月17日 * @version */ public class CallableThreadTest implements Callable<Integer> { @Override public Integer call() throws Exception { int i = 2017; System.out.println(Thread.currentThread().getName() + " " + i); return i; } public static void main(String[] args) { CallableThreadTest ctt = new CallableThreadTest(); FutureTask<Integer> ft = new FutureTask<>(ctt); new Thread(ft, "有返回值的线程").start(); try { System.out.println("子线程的返回值:" + ft.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } }