java가 다중 스레드에 매개 변수를 전달하는 세 가지 방법 상세 소개
package mythread;
public class MyThread1 extends Thread
{
private String name;
public MyThread1(String name)
{
this.name = name;
}
public void run()
{
System.out.println("hello " + name);
}
public static void main(String[] args)
{
Thread thread = new MyThread1("world");
thread.start();
}
}
이런 방법은 스레드 대상을 만드는 동시에 데이터를 전달하기 때문에 스레드가 실행되기 전에 이런 데이터가 이미 도착했기 때문에 데이터가 스레드가 실행된 후에야 전송되는 현상을 일으키지 않는다.더 복잡한 데이터를 전달하려면 집합, 클래스 등 데이터 구조를 사용할 수 있다.구조 방법을 사용하여 데이터를 전달하는 것은 비교적 안전하지만 전달하고자 하는 데이터가 비교적 많으면 많은 불편을 초래할 수 있다.Java는 기본 매개 변수가 없기 때문에 기본 매개 변수와 같은 효과를 실현하려면 재부팅을 사용해야 한다. 이렇게 하면 구조 방법 자체가 너무 복잡할 뿐만 아니라 구조 방법도 수량적으로 크게 증가할 수 있다.따라서 이런 상황을 피하려면 유형 방법이나 유형 변수를 통해 데이터를 전달해야 한다.둘째, 변수와 방법을 통해 데이터를 전달하여 대상에 전송하는 것은 일반적으로 두 번의 기회가 있다. 첫 번째 기회는 대상을 구축할 때 구조 방법을 통해 데이터를 전송하는 것이다. 다른 기회는 클래스에서 일련의public 방법이나 변수(글자라고 할 수도 있다)를 정의하는 것이다.그리고 대상을 세운 후에 대상의 실례를 통해 하나씩 값을 부여한다.다음 코드는 MyThread1 클래스의 버전입니다. setName 방법을 사용하여name 변수를 설정했습니다
package mythread;
public class MyThread2 implements Runnable
{
private String name;
public void setName(String name)
{
this.name = name;
}
public void run()
{
System.out.println("hello " + name);
}
public static void main(String[] args)
{
MyThread2 myThread = new MyThread2();
myThread.setName("world");
Thread thread = new Thread(myThread);
thread.start();
}
}
3. 리셋 함수를 통해 데이터를 전달하는 데 위에서 논의한 두 가지 라인에 데이터를 전달하는 방법이 가장 자주 사용된다.그러나 이 두 가지 방법은 모두main 방법에서 주동적으로 데이터를 라인 클래스에 전송하는 것이다.이것은 라인에 대해 말하자면, 수동적으로 이 데이터를 수신하는 것이다.그러나 일부 응용 프로그램에서는 라인이 실행되는 과정에서 동적으로 데이터를 가져와야 한다. 예를 들어 아래 코드의run 방법에서 3개의 랜덤 수를 생성한 다음work류의process 방법을 통해 이 3개의 랜덤 수의 합을 구하고 데이터 클래스의value를 통해 결과를 되돌려준다.이 예에서 알 수 있듯이value를 되돌리기 전에 반드시 세 개의 무작위 수를 얻어야 한다.즉, 이value는 사전에 라인 클래스에 전송될 수 없습니다..
package mythread;
class Data
{
public int value = 0;
}
class Work
{
public void process(Data data, Integer numbers)
{
for (int n : numbers)
{
data.value += n;
}
}
}
public class MyThread3 extends Thread
{
private Work work;
public MyThread3(Work work)
{
this.work = work;
}
public void run()
{
java.util.Random random = new java.util.Random();
Data data = new Data();
int n1 = random.nextInt(1000);
int n2 = random.nextInt(2000);
int n3 = random.nextInt(3000);
work.process(data, n1, n2, n3); //
System.out.println(String.valueOf(n1) + "+" + String.valueOf(n2) + "+"
+ String.valueOf(n3) + "=" + data.value);
}
public static void main(String[] args)
{
Thread thread = new MyThread3(new Work());
thread.start();
}
}
위 코드에서의process 방법은 리셋 함수라고 불린다.본질적으로 말하자면, 리셋 함수는 사건 함수이다.Windows API에서는 항상 콜백 함수와 API를 호출하는 프로그램 간에 데이터 상호작용을 합니다.따라서 리셋 함수를 호출하는 과정은 가장 원시적인 사건을 일으키는 과정이다.이 예에서 프로세스 방법을 호출해서 데이터를 얻는 것도 런 방법에서 하나의 사건을 일으킨 것과 같다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.