Java线程可以执行不同的任务吗?

Java线程可以执行不同的任务吗?,java,multithreading,concurrency,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

我正在看一个示例,其代码是:

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());
    }
}
我的问题是:每个线程都有自己的代码吗?例如,一个线程递增一个变量,而另一个线程递增另一个变量。 谢谢


另外,示例的链接是:

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());
    }
}
类SimpleThread扩展线程{
//这是SimpleThread的_实例u的本地
私人长眠总;
公共SimpleThread(字符串str){
超级(str);
}
公开募捐{
对于(int i=0;i<10;i++){
System.out.println(i+“”+getName());
试一试{
long-toSleep=Math.random()*1000;
//将其添加到每个线程的本地总数中
sleepTotal+=toSleep;
睡眠(toSleep);
}捕获(中断异常e){}
}
System.out.println(“完成!”+getName());
}
}

我是Java和线程新手,但是你可以这样做(这可能不是很有效),但是使用if语句检查线程的id或getName(),如果它等于特定线程的名称,那么就这样做

比如说:

int i;
int j;

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

        }
    else {
        j++;
        ...
}

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

它们不是已经在这样做了吗…?嗯,它们不是都在这样循环吗?我看不出他们的任务有什么不同。也许下面的内容更容易理解:Thread1执行A,B,C Thread2执行D,E,F我现在看到的是它们都执行run()中的内容。对不起,我只是一个初学者。他们都在做循环,但他们自己的副本。因此线程1中的
i
与线程2中的
i
完全无关。它们彼此独立地循环和处理,即使它们做的基本上是完全相同的事情。我要找的是,他们不会做完全相同的事情。这被认为是正确的还是我误解了多线程?如果您想让他们做两件不同的事情,请创建两个不同的类来扩展
Thread
,并实现不同的
run()
方法。或者,您可以将一个参数传递到定义其功能的线程中,例如processType=0或1。两个线程是否共享并执行run()中的相同代码?如果是,它们是否可能执行不在同一方法run()中的不同任务?例如,thread1执行A、B、C,thread2执行D和E。共享相同的代码是@Blagovest,但不共享相同的字段存储。@Blagovest如果希望它们运行不同的任务,则可以指定不同的
run()
方法或不同的
Thread
类。您还可以将一些值传递给构造函数,
run()
方法可以使用它来确定它应该是od A、B、C还是D、E。
int i;
int j;

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

        }
    else {
        j++;
        ...
}