RunnableåCallableçåºå«æ¯ï¼
(1)Callableè§å®çæ¹æ³æ¯call(),Runnableè§å®çæ¹æ³æ¯run().
(2)Callableçä»»å¡æ§è¡åå¯
è¿åå¼ï¼èRunnableçä»»å¡æ¯ä¸è½è¿åå¼å¾
(3)callæ¹æ³å¯ä»¥æåºå¼å¸¸ï¼runæ¹æ³ä¸å¯ä»¥
(4)è¿è¡Callableä»»å¡å¯ä»¥æ¿å°ä¸ä¸ªFuture对象ï¼è¡¨ç¤ºå¼æ¥è®¡ç®çç»æãå®æä¾äºæ£æ¥è®¡ç®æ¯å¦å®æçæ¹æ³ï¼ä»¥çå¾
计ç®çå®æï¼å¹¶æ£ç´¢è®¡ç®çç»æãéè¿Future对象å¯ä»¥äºè§£ä»»å¡æ§è¡æ
åµï¼å¯åæ¶ä»»å¡çæ§è¡ï¼è¿å¯è·åæ§è¡ç»æã
1ãéè¿å®ç°Runnableæ¥å£æ¥å建Thread线ç¨ï¼
æ¥éª¤1ï¼å建å®ç°Runnableæ¥å£çç±»ï¼
class SomeRunnable implements Runnable
{
public void run()
{
//do something here
}
}
æ¥éª¤2ï¼å建ä¸ä¸ªç±»å¯¹è±¡ï¼
Runnable oneRunnable = new SomeRunnable();
æ¥éª¤3ï¼ç±Runnableå建ä¸ä¸ªThread对象ï¼
Thread oneThread = new Thread(oneRunnable);
æ¥éª¤4ï¼å¯å¨çº¿ç¨ï¼
oneThread.start();
è³æ¤ï¼ä¸ä¸ªçº¿ç¨å°±å建å®æäºã
注éï¼çº¿ç¨çæ§è¡æµç¨å¾ç®åï¼å½æ§è¡ä»£ç oneThread.start();æ¶ï¼å°±ä¼æ§è¡oneRunnable对象ä¸çvoid run();æ¹æ³ï¼
该æ¹æ³æ§è¡å®æåï¼çº¿ç¨å°±æ¶äº¡äºã
2ãä¸æ¹æ³1类似ï¼éè¿å®ç°Callableæ¥å£æ¥å建Thread线ç¨ï¼å
¶ä¸ï¼Callableæ¥å£ï¼ä¹åªæä¸ä¸ªæ¹æ³ï¼å®ä¹å¦ä¸ï¼
public interface Callable<V>
{
V call() throws Exception;
}
æ¥éª¤1ï¼å建å®ç°Callableæ¥å£çç±»SomeCallable<Integer>ï¼ç¥ï¼ï¼
æ¥éª¤2ï¼å建ä¸ä¸ªç±»å¯¹è±¡ï¼
Callable<Integer> oneCallable = new SomeCallable<Integer>();
æ¥éª¤3ï¼ç±Callable<Integer>å建ä¸ä¸ªFutureTask<Integer>对象ï¼
FutureTask<Integer> oneTask = new FutureTask<Integer>(oneCallable);
注éï¼FutureTask<Integer>æ¯ä¸ä¸ªå
è£
å¨ï¼å®éè¿æ¥åCallable<Integer>æ¥å建ï¼å®åæ¶å®ç°äºFutureåRunnableæ¥å£ã
æ¥éª¤4ï¼ç±FutureTask<Integer>å建ä¸ä¸ªThread对象ï¼
Thread oneThread = new Thread(oneTask);
æ¥éª¤5ï¼å¯å¨çº¿ç¨ï¼
oneThread.start();
è³æ¤ï¼ä¸ä¸ªçº¿ç¨å°±å建å®æäºã
3ãéè¿ç»§æ¿Threadç±»æ¥å建ä¸ä¸ªçº¿ç¨ï¼
æ¥éª¤1ï¼å®ä¹ä¸ä¸ªç»§æ¿Threadç±»çåç±»ï¼
class SomeThead extends Thraad
{
public void run()
{
//do something here
}
}
æ¥éª¤2ï¼æé åç±»çä¸ä¸ªå¯¹è±¡ï¼
SomeThread oneThread = new SomeThread();
æ¥éª¤3ï¼å¯å¨çº¿ç¨ï¼
oneThread.start();
è³æ¤ï¼ä¸ä¸ªçº¿ç¨å°±å建å®æäºã
注éï¼è¿ç§å建线ç¨çæ¹æ³ä¸å¤å¥½ï¼ä¸»è¦æ¯å 为å
¶æ¶åè¿è¡æºå¶é®é¢ï¼å½±åç¨åºæ§è½ã
4ãéè¿
线ç¨æ± æ¥å建线ç¨ï¼
æ¥éª¤1ï¼å建线ç¨æ± ï¼
ExecutorService pool = Executors.newCachedThreadPool();
æ¥éª¤2ï¼éè¿Runnable对象æCallable对象å°ä»»å¡æ交ç»ExecutorService对象ï¼
Future<Integer> submit(Callable<Integer> task);
注éï¼Futureæ¯ä¸ä¸ªæ¥å£ï¼å®çå®ä¹å¦ä¸ï¼
public interface Future<T>
{
V get() throws ...;
V get(long timeout, TimeUnit unit) throws ...;
void cancle(boolean mayInterrupt);
boolean isCancelled();
boolean isDone();
}
è³æ¤ï¼ä¸ä¸ªçº¿ç¨å°±å建å®æäºã
注éï¼çº¿ç¨æ± éè°ç¨shutdown();æ¹æ³æ¥å
³é线ç¨ã
5ãéè¿äºä»¶åé
线ç¨ç´æ¥ä½¿ç¨ç¨åºä¸çåæ线ç¨ï¼
使ç¨æ¹æ³ï¼
ç´æ¥è°ç¨EventQueueç±»çéææ¹æ³invokeLater()ï¼
EventQueue.invokeLater(oneRunnable);
注éï¼è°ç¨EventQueue.invokeLater(oneRunnable);ä¼ç´æ¥æ§è¡oneRunnable对象ä¸çrun()æ¹æ³