Java线程做不同的任务?

时间:2012-03-28 22:07:47

标签: java multithreading concurrency

我正在看一个代码是:

的例子
class SimpleThread extends Thread {
    public SimpleThread(String str) {
        super(str);
}

public void run() {
    for (int i = 0; i < 10; i++) {
        System.out.println(i + " " + getName());
            try {
        sleep((int)(Math.random() * 1000));
        } catch (InterruptedException e) {}
    }
    System.out.println("DONE! " + getName());
    }
}

class TwoThreadsTest {
    public static void main (String args[]) {
        new SimpleThread("Jamaica").start();
        new SimpleThread("Fiji").start();
    }
}

我的问题是:每个线程都有自己的代码吗?例如,一个线程增加一个变量,而另一个线程增加其他变量。 感谢。

P.S。示例的链接是:http://www.cs.nccu.edu.tw/~linw/javadoc/tutorial/java/threads/simple.html

2 个答案:

答案 0 :(得分:1)

SimpleThread的每个实例都有自己的本地类存储。只要您没有使用标记为static的字段,那么每个线程都将“执行自己的代码”。在线程之间同步很多

例如:

class SimpleThread extends Thread {

    // this is local to an _instance_ of SimpleThread
    private long sleepTotal;

    public SimpleThread(String str) {
        super(str);
    }

    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(i + " " + getName());
            try {
                long toSleep = Math.random() * 1000;
                // add it to our per-thread local total
                sleepTotal += toSleep;
                sleep(toSleep);
            } catch (InterruptedException e) {}
        }
        System.out.println("DONE!  " + getName());
    }
}

答案 1 :(得分:1)

我是Java新手并且自己创建线程,但你可以做这样的事情(这可能不是很有效)但是使用if语句来检查线程的id或getName()以及它是否.equals的名称特定的线程然后这样做等

这样的事情:

int i;
int j;

    if ("thread 2".equals(Thread.currentThread().getName())){
        i++;
        System.out.println("this is thread 2");

        }
    else {
        j++;
        ...
}

这应该允许您使线程在相同的run()方法下运行不同的任务