Java:将参数传递给另一个线程的线程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java:将参数传递给另一个线程的线程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2651字,纯文字阅读大概需要4分钟。
内容图文
![Java:将参数传递给另一个线程的线程](/upload/InfoBanner/zyjiaocheng/752/e13fcd2a60b2487ba2af93e7a9087fc0.jpg)
我有两个名为Reader和Worker的java类. Reader从文本文件中读取字符串,并将这些字符串传递给Workers,这些字符串将这些字符串排序为树.所以我创建了许多Worker-threads和1个Reader-thread:
try {
/* Create and run worker processes. */
workers = new TrieWorker[numberOfWorkers];
for(int i = 0; i < numberOfWorkers; i++)
{
workers[i] = new TrieWorker(this);
new Thread(workers[i]).run();
}
/* Create and run reader process. */
reader = new TrieReader(this, filename);
new Thread(reader).run();
} catch(Exception e) {
e.printStackTrace();
}
当我的Reader从run() – 方法内的文本文件中读取字符串时,它通过调用将字符串传递给其中一个worker
workers[i].add(string);
在调用此方法之前,工人基本上什么都不做.所以我想知道,Reader在将此参数传递给其中一个Worker之后会立即继续从文本文件中读取吗?或者只有在完成字符串后,它才会从此方法返回?换句话说,当一个Thread将参数传递给另一个时,除非Thread传递参数需要某种回答,否则它们都会继续做自己的事情吗?
希望你们知道我的意思,真的很难解释.
编辑:谢谢你的好答案!这是Reader类的代码:
private static int numberOfNextWorker = 0;
public void run()
{
System.out.println("Reader run.");
try {
System.out.println("Reading " + filename);
read();
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void read() throws Exception
{
File file = new File(filename);
Scanner reader = new Scanner(file);
if(file.canRead() == false)
throw new Exception("file " + filename + " cannot be read.");
long totalLength = file.length();
while(reader.hasNextLine())
{
String text = reader.nextLine();
numberOfLines++;
/* Passes the work on to workers. */
if(numberOfNextWorker == (numberOfWorkers - 1))
numberOfNextWorker = 0;
else
numberOfNextWorker++;
workers[numberOfNextWorker].add(text);
}
}
在这里工人:
public void run()
{
System.out.println("Worker run.");
}
void add(String text)
{
numberOfStrings++;
char[] chars = text.toCharArray();
int i = 0;
Node node = new Node();
while (chars.length > i) {
node.value = chars[i];
node = node.children;
i++;
}
}
它没有做任何明智的事情:)我想我理解你所说的.我已经阅读了很多关于并发性的书,并在纸上做了一些练习,但没有尝试过那么多的代码.
解决方法:
您需要一个名为resource的第三个类.您的线程将通过共享资源进行通信.想想生产者 – 消费者你的工作者会添加到sortedReult.
public class Resource{
Queue<String> semaphore = new LinkedList<String>();
Queue<String> sortedResult = new LinkedList<String>();
public synchronized addStrings(List<String> words){//for reader
semaphore.addAll(words);
notify();
}//
public synchronized String getString(){//for workers
while(semaphore.isEmpty())
try{ wait();}
catch(InterruptedException e){}
return semaphore.remove();
}
}
顺便说一句,你调用run()表明你有点理解逻辑.但是在Java中,你必须调用start()并让start()依次调用run().
内容总结
以上是互联网集市为您收集整理的Java:将参数传递给另一个线程的线程全部内容,希望文章能够帮你解决Java:将参数传递给另一个线程的线程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。