Java потоки для выполнения разных задач? - PullRequest
0 голосов
/ 29 марта 2012

Я смотрю на пример, какой код:

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();
    }
}

Мой вопрос: есть ли способ, которым каждый поток делает свой собственный код?Например, один поток увеличивает переменную, а другой - другую переменную.Спасибо.

PS Пример ссылки: http://www.cs.nccu.edu.tw/~linw/javadoc/tutorial/java/threads/simple.html

Ответы [ 2 ]

1 голос
/ 19 мая 2013

Я новичок в 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 ()

1 голос
/ 29 марта 2012

Каждый экземпляр 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());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...