java向线程中传递参数

来源:互联网 发布:淘宝网免费下载 编辑:程序博客网 时间:2024/04/26 07:30

1、通过构造函数传递参数

   public class CreateIndexThread extends Thread {


public boolean flag = true;
private String d;
private String e;
private String f;


public static void main(String[] args) {
new CreateIndexThread("user1", "d:/index", "").start();
}


public CreateIndexThread(String username, String route, String field) {


d = username;
e = route;
f = field;
}


public synchronized void run() {


while (flag) {
System.out.println("线程已启动,每隔1分钟检索一次........");
DataOperator db = new DataOperator();
System.out.println("ddd:" + d);
String sql1 = "select * from " + d + " where state=0";
ResultSet r1 = db.executeQuery(sql1);
try {
try {
while (r1.next()) {
System.out.println("建立索引用户名:" + d);
new LuceneFindManagerImpl().CreateIndex(d, e, f);


}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


Thread.sleep(1000 * 5);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


}
}
}

2、通过变量和方法传递数据

public class CreateIndexThreadimplements Runnable

 private String d;
    public void setD(String d)
    {
        this.d= d;
    }

public static void main(String[] args)
    {
        CreateIndexThread c= new CreateIndexThread();
        c.setD("world");
        Thread thread = new Thread(c);
        thread.start();
    }

3、通过回调函数传递数据

package mythread;

class Data
{
    
public int value = 0;
}
class Work
{
    
public void process(Data data, Integer numbers)
    {
        
for (int n : numbers)
        {
            data.value 
+= n;
        }
    }
}
public class MyThread3 extends Thread
{
    
private Work work;

    
public MyThread3(Work work)
    {
        
this.work = work;
    }
    
public void run()
    {
        java.util.Random random 
= new java.util.Random();
        Data data 
= new Data();
        
int n1 = random.nextInt(1000);
        
int n2 = random.nextInt(2000);
        
int n3 = random.nextInt(3000);
        work.process(data, n1, n2, n3);   
// 使用回调函数
        System.out.println(String.valueOf(n1) + "+" + String.valueOf(n2) + "+"
                
+ String.valueOf(n3) + "=" + data.value);
    }
    
public static void main(String[] args)
    {
        Thread thread 
= new MyThread3(new Work());
        thread.start();
    }
}

在上面代码中的process方法被称为回调函数。从本质上说,回调函数就是事件函数。

Windows API中常使用回调函数和调用API的程序之间进行数据交互。

因此,调用回调函数的过程就是最原始的引发事件的过程。

在这个例子中调用了process方法来获得数据也就相当于在run方法中引发了一个事件。

回调函数http://blog.csdn.net/tiandizhushen/article/details/9849891

原创粉丝点击