</p> public class MyThread3 extends Thread; B; _3 j3 u8 |
{
0 w$ l, `. o8 W$ C5 y3 r private Work work;
/ |4 p( W n+ D- Q public MyThread3(Work work)6 g% B- s1 Q1 k, ~$ _: F
{. F y2 k4 X9 x7 K
this.work = work;
" M7 x/ d% ?, G; i+ D) F8 p6 M } I: K' w; M r
public void run()* j7 l5 }6 Y% [8 M' s/ R) ~
{
/ u9 M: `4 q) Q7 i, B9 G7 w; z& } java.util.Random random = new java.util.Random();6 }- R& }; g8 K% d
Data data = new Data();
9 f; n9 p: d+ x# [ int n1 = random.nextInt(1000);
* l* n5 {$ U- M, D$ b. e% P; ~ int n2 = random.nextInt(2000);
1 f8 L; Q: u( u' B5 I int n3 = random.nextInt(3000);/ m, U: G" ~2 b, J& J _: i5 }! w
work.process(data, n1, n2, n3); // 使用回调函数
$ ] n$ \# K A4 X! l System.out.println(String.valueOf(n1) + "+" + String.valueOf(n2) + "+"
/ e( _; Z, I, m& e9 R; _6 r + String.valueOf(n3) + "=" + data.value);- \+ z& Y$ }1 _3 w. G/ `; ]
}, ?1 u. S7 F4 {
public static void main(String[] args)
# b5 z3 P/ i2 Z$ t7 L( D+ f u {" z% y: X% E9 l' ]; G" b; s
Thread thread = new MyThread3(new Work());
- R4 `3 r% q+ E& J* [& ]4 X2 a& h# ^ thread.start();
0 D! I+ Y, ?' O }+ a% E, O3 c7 M$ {
}
! h" a! h/ l# a7 Y$ O/ m 在上面代码中的process方法被称为回调函数。从本质上说,回调函数就是事件函数。在Windows API中常使用回调函数和调用API的程序之间进行数据交互。因此,调用回调函数的过程就是最原始的引发事件的过程。在这个例子中调用了process方法来获得数据也就相当于在run方法中引发了一个事件。 |