我可以知道java中的线程可运行类属性吗?
这个问题以前有人问过,但我在我的搜索机制中找不到任何东西。我试图在数组列表中创建多个线程,但我想从arraylist中检索它们,并通过我在代码中使用的w1属性对它们进行过滤。有什么想法吗我可以知道java中的线程可运行类属性吗?,java,multithreading,attributes,Java,Multithreading,Attributes,这个问题以前有人问过,但我在我的搜索机制中找不到任何东西。我试图在数组列表中创建多个线程,但我想从arraylist中检索它们,并通过我在代码中使用的w1属性对它们进行过滤。有什么想法吗 w1 = new FirstWorker(ProductsList, OrdersList, s); FirstWorkerThread = new Thread(w1); ThreadArrayList.add(FirstWorkerThread); //I know i ca
w1 = new FirstWorker(ProductsList, OrdersList, s);
FirstWorkerThread = new Thread(w1);
ThreadArrayList.add(FirstWorkerThread);
//I know i cant do the code below but i want to do that how ?
for(Thread x : ThreadArrayList){
x.ProductsList
}
这是头等舱
import java.lang.String;
import java.util.HashMap;
/*
* To change this template, choose Tools | Templates and open the template in
* the editor.
*/
/**
*
* @author Dimitris
*/
public class FirstWorker extends Thread implements Runnable {
private OrderList orderlist;
private ProductList productlist;
private String Worker;
boolean Stop;
private int speed = 1000;
public FirstWorker(ProductList productlist, OrderList orderlist, String Worker) {
this.productlist = productlist;
this.orderlist = orderlist;
this.Worker = Worker;
this.Stop = true;
}
public void run() {
if (Stop == true) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
while (orderlist.returnLengthofOrder() != 0) {
if (Thread.interrupted()) {
System.out.println("I am in the thread inturrupt");
// We've been interrupted: no more crunching.
return;
}
if (orderlist.getDone() == true) {
} else if (orderlist.getDone() == false) {
orderlist.setDoneTrue();
orderlist.Purchased(Worker);
orderlist.setDoneFalse();
try {
Thread.sleep(this.speed);
} catch (InterruptedException e) {
return;
}
}
}
}
}
public void setWork() {
Stop = false;
}
public void setSpeed(int speed) {
this.speed = speed;
}
}
用Runnable构造线程的简单答案是否定的 您正在使用的线程的构造函数接受可运行的。。。我假设FirstWorker实现了Runnable接口 但是查看线程的API文档,没有返回Runnable的方法 在不了解更多有关您尝试执行的操作的上下文的情况下,最简单的方法可能是将FirstWorker更改为扩展线程,这样您的循环就可以工作了
这可能会起作用,但需要更多地了解如何重新发送其他内容。如果要访问Runnable的成员变量,应该扩展线程,而不是实现Runnable。另外,不要扩展线程并实现Runnable。挑一个
public class MyThread extends Thread
{
public int myarg;
public void run()
{
}
}
public void useThread(int inputArgs[])
{
ArrayList<MyThread> threadArray = new ArrayList<MyThread>();
for (int arg : inputArgs)
{
MyThread temp = new MyThread(arg);
temp.start();
threadArray.add(temp);
}
for (MyThread t : threadArray)
System.out.println(t.myarg);
}
公共类MyThread扩展线程
{
公共int myarg;
公开募捐
{
}
}
public void useThread(int-inputArgs[])
{
ArrayList threadArray=新的ArrayList();
for(int arg:inputArgs)
{
MyThread temp=新的MyThread(arg);
临时启动();
threadArray.add(temp);
}
for(MyThread t:threadArray)
System.out.println(t.myarg);
}
如果要从线程
对象中的可运行
实例检索属性,我认为这通常是不可能的,因为线程
类没有返回其目标可运行
对象的方法
也就是说,您始终可以扩展线程
类本身,这将允许您在强制转换和获取所需的任何属性之前,将instanceof
与线程
实例一起使用
但是,请记住,扩展线程
,如果您打算直接从可运行
对象获取某些计算结果,如果您不小心,可能会遇到一些严重的问题
在任何情况下,最新的Java版本(即1.5+)都提供了并发性,我怀疑您的应用程序将从使用它们的重新设计中受益
如果你用更广泛的术语解释了你想要做的事情,我们也许能帮助更多…… 你应该考虑使用新的java. UTIL并发包。通过一个ExecutorService和一组可调用项,可以更轻松直观地实现您要做的事情
查看并查看(特别是fixedThreadPool)。友好的建议:对于Java中的变量名,使用
theCamelCase
,这会使代码更易于阅读,特别是对于其他Java开发人员。我不是100%确定你在问什么,但也许你想要的是未来而不是线程的数组列表。或者与其说是ArrayList,不如说是PriorityQueue。呃,除非我弄错了,否则这段代码在语法上是无效的(x.ProductsList
?嗯?)。更不用说,如果所有的类定义和变量声明都丢失了,你就不可能知道你想做什么…@thkala我认为这是伪的code@keyser5053:这并不能使OP想要的更清楚:-/