我正在看一个代码是:
的例子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
答案 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()方法下运行不同的任务