Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以知道java中的线程可运行类属性吗?_Java_Multithreading_Attributes - Fatal编程技术网

我可以知道java中的线程可运行类属性吗?

我可以知道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

这个问题以前有人问过,但我在我的搜索机制中找不到任何东西。我试图在数组列表中创建多个线程,但我想从arraylist中检索它们,并通过我在代码中使用的w1属性对它们进行过滤。有什么想法吗

    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想要的更清楚:-/