1ã继æ¿Threadç±»å建线ç¨
Threadç±»æ¬è´¨ä¸æ¯å®ç°äºRunnableæ¥å£çä¸ä¸ªå®ä¾ï¼ä»£è¡¨ä¸ä¸ªçº¿ç¨çå®ä¾ãå¯å¨çº¿ç¨çå¯ä¸æ¹æ³å°±æ¯éè¿Threadç±»çstart()å®ä¾æ¹æ³ãstart()æ¹æ³æ¯ä¸ä¸ªnativeæ¹æ³ï¼å®å°å¯å¨ä¸ä¸ªæ°çº¿ç¨ï¼å¹¶æ§è¡run()æ¹æ³ãè¿ç§æ¹å¼å®ç°å¤çº¿ç¨å¾ç®åï¼éè¿èªå·±çç±»ç´æ¥extend Threadï¼å¹¶å¤årun()æ¹æ³ï¼å°±å¯ä»¥å¯å¨æ°çº¿ç¨å¹¶æ§è¡èªå·±å®ä¹çrun()æ¹æ³ãä¾å¦ï¼
public class MyThread extends Thread {
ããpublic void run() {
ãã System.out.println("MyThread.run()");
ãã}
}
MyThread myThread1 = new MyThread();
MyThread myThread2 = new MyThread();
myThread1.start();
myThread2.start();
2ãå®ç°Runnableæ¥å£å建线ç¨
å¦æèªå·±ç类已ç»extendså¦ä¸ä¸ªç±»ï¼å°±æ æ³ç´æ¥extends Threadï¼æ¤æ¶ï¼å¯ä»¥å®ç°ä¸ä¸ªRunnableæ¥å£ï¼å¦ä¸ï¼
public class MyThread extends OtherClass implements Runnable {
ããpublic void run() {
ãã System.out.println("MyThread.run()");
ãã}
}
为äºå¯å¨MyThreadï¼éè¦é¦å
å®ä¾åä¸ä¸ªThreadï¼å¹¶ä¼ å
¥èªå·±çMyThreadå®ä¾ï¼
MyThread myThread = new MyThread();
Thread thread = new Thread(myThread);
thread.start();
äºå®ä¸ï¼å½ä¼ å
¥ä¸ä¸ªRunnable targetåæ°ç»Threadåï¼Threadçrun()æ¹æ³å°±ä¼è°ç¨target.run()ï¼åèJDKæºä»£ç ï¼
public void run() {
ããif (target != null) {
ãã target.run();
ãã}
}
3ãå®ç°Callableæ¥å£éè¿FutureTaskå
è£
å¨æ¥å建Thread线ç¨
Callableæ¥å£ï¼ä¹åªæä¸ä¸ªæ¹æ³ï¼å®ä¹å¦ä¸ï¼
public interface Callable<V> {
V callï¼ï¼ throws Exception;
}public class SomeCallable<V> extends OtherClass implements Callable<V> {
@Override public V call() throws Exception { // TODO Auto-generated method stub
return null;
}
}Callable<V> oneCallable = new SomeCallable<V>();
//ç±Callable<Integer>å建ä¸ä¸ªFutureTask<Integer>对象ï¼
FutureTask<V> oneTask = new FutureTask<V>(oneCallable);
//注éï¼FutureTask<Integer>æ¯ä¸ä¸ªå
è£
å¨ï¼å®éè¿æ¥åCallable<Integer>æ¥å建ï¼å®åæ¶å®ç°äºFutureåRunnableæ¥å£ã
//ç±FutureTask<Integer>å建ä¸ä¸ªThread对象ï¼
Thread oneThread = new Thread(oneTask);
oneThread.start();
//è³æ¤ï¼ä¸ä¸ªçº¿ç¨å°±å建å®æäºã