나는 질문이 있는데, 꽤 오랫동안 그것을 검색 한 후 그 답을 찾을 수 없었다. 브라우저 응용 프로그램을 만들려고합니다. 내가 원하는 것은 메인 메소드가 실행될 때 메인 브라우저 애플리케이션으로 간주하고 사용자는 이제 여러 개의 탭을 여는 옵션을 가졌다는 것입니다. 스레드가 시작될 때마다 탭이 열리고 주 응용 프로그램이 닫히면 모든 탭이 닫힙니다. 각 탭 (스레드)은 독립적으로 실행되며 사용자는 탭을 전환 할 수있는 옵션을 가지고 있습니다. 사용자가 새 탭에서 작업하면서 사용자가 원하는만큼 탭을 열 수 있습니다. 그 작업을 완료하고 오히려 다음은 주요로 돌아갑니다 사용자로부터 입력을 기다리고,스레드간에 제어를 전송하는 방법
import java.util.Scanner;
public class mainClass
{
/**
* @param args
*/
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
String input="abc";
String check="true";
while (check=="true")
{
System.out.println("if you want to open new tab write yes");
input=in.nextLine();
if (input.equals("yes"))
{
System.out.println("if check");
Thread tab = new myThread();
tab.start();
check="true";
}
else
{
check="false";
System.out.println("else check");
}
}
return;
}
}
public class myThread extends Thread
{
public myThread()
{
setDaemon(true);
}
public void run()
{
Scanner in = new Scanner(System.in);
System.out.println("one thread started");
System.out.println("enter url to search\n");
String input=in.nextLine();
}
}
내 문제는 사용자가 스레드를 열고 싶을 때,이 열릴 것입니다 : 여기 내 코드입니다. 내가 원하는 것은 사용자가 탭 사이를 전환 할 수있는 옵션이 있어야한다는 것입니다. 사용자가 탭을 열면 그는 아무 것도하지 않고도 다른 탭으로 전환하기를 원할 때도 해당 탭에 머무르게됩니다. 어떻게 스레드를 완전히 제어 할 수 있습니까? 또는 사용자가 새 스레드에서 작업 할 때까지 주 스레드를 잠자기() 할 수 있으며 사용자가 주 스레드로 돌아가서 그 스레드를 다시 시작할 수있게하려면 어떻게 할 수 있습니까?
을 사용하면 도움이 될 수있는 'yield' 방법이 있습니다. 그런데, 나는 매우 추천한다. 프로그래밍 동시성 튜토리얼 동굴 – Coffee
종종 성능 문제 및 기타 신비한 버그가 발생하기 때문에 수동으로 스레드를 예약하는 것을 권장하지 않습니다. 아키텍처를 다시 생각해보고 GUI/탭/등을 하나의 스레드로 생각하고 백그라운드에서 응용 프로그램 상태를 최신 상태로 유지하는 다른 스레드로 생각하는 것이 좋습니다. – xea
나는 실제로 쓰레드를 전혀 사용하지 않을 것이다. 여러 개의 탭은 병렬로 작동하지 않고 순차적으로 작동하며 단일 스레드가 이미 수행 할 수 있습니다. 당신이 가지고있는 것은 "상태"입니다. 그러나 그것이 각 인스턴스가 자신의 상태를 가지고있는 객체가있는 이유입니다. – zapl