2015-02-19 3 views
0

Извините, у меня есть глупый вопрос.Как получить главный поток из Thread.currentThread()?

У меня есть два потока. Thread_Main и Thread_Simple, в Thread_Main выполняется метод A() и метод B(). В Thread_Simple выполняется метод C(). Сейчас: first performed method A(), then performed method C(), then performed method B(), then performed method A(), then performed method C(), then method B(), ...

Но я хочу: first performed method A(), then performed method B(), then performed method C(), then A(), B(), C(), ... Как это сделать? Я просто имею доступ к Thread_Simple (Thread.currentThread()), Как я могу получить Thread_Main из Thread.currentThread()?

+0

ваш вопрос очень абстрактно:/ – SabaRish

+1

Если вещи должны работать в определенном последовательном порядке, то почему вы используете темы в первую очередь? –

+0

Если вы хотите выполнить последовательный заказ, то в чем цель использования потоков? Вместо этого используйте последовательный код ....... –

ответ

0

Обычно это делается с помощью блокировки потока. Это обеспечивает выполнение всех методов в одном потоке до того, как будет выполнен другой поток. Можете ли вы предоставить код? Также немного смущен, что вы имеете в виду, что у вас есть доступ только к одному потоку?

0

вы можете использовать метод соединения для этого.

public class Test { 
public static void main(String[] args) { 
ThreadSample threadSample=new ThreadSample(); 
threadSample.start(); 
} 
} 

class Sample{ 
//Function a 
public static void a(){ 
    System.out.println("func a"); 
} 
//Function b 
public static void b(){ 
    System.out.println("func b"); 
} 
//Function c 
public static void c(){ 
    System.out.println("func c"); 
} 
} 

class ThreadSample extends Thread{ 
@Override 
public void run() { 
    ThreadMain threadMain=new ThreadMain(); 
    threadMain.start(); 
    try { 
     threadMain.join(); 
    } catch (InterruptedException e) { 
     //handle InterruptedException 
    } 
    //call function c 
    Sample.c(); 
} 
} 
class ThreadMain extends Thread{ 
@Override 
public void run() { 

    //call function a 
    Sample.a(); 
    //call function b 
    Sample.b(); 
} 
} 

выход:

func a 
func b 
func c 
+0

И вы уверены, что написание кода в 'sqeuential order' будет обеспечивать последовательный порядок' Threads' для maintian ......? Что делать, если во время выполнения метода 'a()' происходит переключение контекста, а метод 'b()' запускает выполнение –

+0

, так как обе функции a() и b() вызывается из метода запуска того же потока. поэтому они будут поддерживать порядок, в котором они называются. – Deepak

+0

Вы пытаетесь сказать, что если «метод a» занимает 15 секунд, то ваш поток будет ждать «15 секунд» перед вызовом метода b .... Его время, чтобы освежить некоторые базовые навыки java –