>Java >java지도 시간 >자바 멀티스레딩에 대한 토론

자바 멀티스레딩에 대한 토론

巴扎黑
巴扎黑원래의
2017-07-20 13:24:491634검색

1. 주제 소개

Java 멀티스레딩 메커니즘에 대해 간략하게 설명하기 전에 먼저 우리나라 IT 업계의 기술 공유 분위기가 열악하고 인터넷 기술 답변의 깊이가 낮다는 점을 불평해야 합니다. Java를 처음 접하는 사람이 나에게 Java 멀티스레딩 메커니즘 관련 문제에 대해 물었을 때 나는 그에게 Du Niang에게 도움을 구하고 먼저 스스로 문제를 해결하는 방법을 배우도록 요청했지만 그는 나에게 그렇게 할 수 없다고 말했습니다. 그가 원하는 것을 온라인에서 찾아보세요. 저도 오랫동안 인터넷에서 정보를 검색해 보았지만 상세하고 명확하게 표현된 문서는 실제로 찾을 수 없었습니다. 더욱 안타까운 점은 특정 참고 가치가 있을 수 있는 일부 문서를 등록, 회신, 심지어 구매를 위해 돈을 쓰는 등 비정상적인 수단을 통해 다운로드해야 한다는 점입니다. 이는 필연적으로 많은 사람들을 낙담하게 만들고 결국 아무 일도 일어나지 않을 것입니다.

고의로 비판하는 것은 아니지만 더 많은 사람들이 Linux 자유의 아버지인 Stallman처럼 기부하는 방법을 배울 수 있기를 바랍니다. 모두가 기부를 시도할 수 있다면 결국에는 모두가 기부를 요청하는 것이 더 쉬워질 것입니다.

(앞으로 시간이 나면 계속해서 Java 지식 포인트를 분류, 요약하여 CSDN 개인 블로그에 올릴 예정이며, Java 외에 다른 콘텐츠 소개도 고려할 예정이니 지켜봐주세요. tuned^(... )^)


2. 현실에서도 비슷한 문제

당신이 패스트푸드점 주인이 되어 열심히 일한 결과, 마침내 그 패스트푸드점이 바빠졌다고 가정해 보세요. 사업이 호황을 누리고 있는데, 귀하는 매출을 확대하기 위해 방문 음식 배달 서비스를 추가하기로 결정했습니다. 회사 재무에 따르면 이 사업을 확장하기 위해 120,000위안을 할당할 수 있다고 합니다. ?

물론 제어할 수 있는 방법은 다양하며 제어 시 인원수, 음식 배달 범위, 음식 배달 형식 및 기타 문제를 고려해야 합니다. 여기서는 음식 배달 형식의 세부 사항에 중점을 둡니다.

1) 쉐보레 돛 구입

2) 배터리 자동차 15대 구입

직원 급여 등 기본 비용을 빼고 남은 돈은 음식 배달 도구 구입에 사용됩니다. 위의 음식 배달 차량에는 모두 고유한 장점이 있습니다. 첫째, Chevrolet Sail은 더 빠른 음식 배달 속도를 달성할 수 있고 더 넓은 범위의 음식 배달을 제공할 수 있습니다. 둘째, 음식 배달 차량으로 배터리 카트를 사용하면 동시에 여러 고객에게 배달할 수 있습니다. 시간이 걸리고 배달 비용이 줄어 듭니다. 분명히 저렴합니다. 둘 중, 당신은 어떤 선택을 하시겠습니까?

확실히 더 실용적인 두 번째 음식 배달 차량입니다. 이에 비해 후자는 더 많은 수의 고객을 처리할 수 있고 뒤쪽에 있는 고객의 대기 시간이 크게 단축됩니다. 전화해서 점심을 주문했는데, 25번째 손님이라 저녁 6시가 넘어서야 배달이 된다면 기분이 어떨까요?

사실 패스트푸드점 주인이 음식 배달을 위해 여러 개의 배터리 카트를 선택하는 것에 대한 고려는 프로세스에 대한 다중 스레드 제어를 선택하는 아이디어와 정확히 동일합니다. 단일 스레드 프로그램은 종종 기능이 매우 제한되어 있어 이를 수행할 수 없습니다. 일부 특정 영역에서는 효율성 측면에서도 우리의 기대를 충족할 수 있습니다. 예를 들어, 여러 고객이 동시에 서버 데이터에 액세스하려는 경우 단일 스레드의 경우 이 아이디어가 무용지물이 되며 여러 고객의 요구 사항이 스택에 저장되어 실행됩니다. 후속 고객이 더 나은 액세스 경험을 갖기는 어렵습니다.

Java 언어는 탁월한 멀티스레딩 지원을 제공합니다. 멀티스레드 프로그램은 여러 순차 실행 스트림을 포함할 수 있으며 여러 순차 실행 스트림은 서로 간섭하지 않습니다. 일반적으로 멀티 스레드 프로그래밍을 사용하면 다음과 같은 이점이 있습니다.

1) 여러 스레드 간에 메모리 데이터를 공유할 수 있습니다. 2) 여러 스레드가 동시에 실행되고 동시에 여러 작업을 완료할 수 있습니다.

3) Java 언어에는 멀티스레딩 기능 지원이 내장되어 있어 Java의 멀티스레딩 프로그래밍이 단순화됩니다.

멀티 스레드 생성 방법

(1) Thread 클래스 상속: 새로 생성된 스레드 클래스가 다른 상위 클래스를 상속해야 한다는 점을 고려하면 이 방법은 일반적으로 사용되지 않습니다.

 MyThread

(2) 구현합니다. Runnable 인터페이스: 가장 일반적으로 사용되는 메서드

class MyThread implements Runnable{
  @Overridepublic void run(){      //do something here             }
}

(3) Callable 인터페이스 구현: 이 메서드는 결과 값을 반환해야 하는 시나리오에서 사용됩니다. Collable 인터페이스를 구현하려면 호출( ) 메소드

 class MyThread implements Callable<String>{
  @Override
  public String call() throws Exception{
     //do something here
    return XXX;
  }
  
}

public class FutureMain{
  public static void main(String[] args){
    //构造FutureTask
    FutureTask<String> future = new FutureTask<String>(new MyThread());
    Thread t1 = new Thread(future);
    t1.start();
    //取得call()方法的返回值
    System.out.println("返回值"+future.get());
  }
}

물론 기본 기능 외에도 JDK는 Future를 위한 몇 가지 간단한 제어 기능도 제공합니다.

boolean cancle(boolean mayInterruptIfRunning);                       //取消任务boolean isCancelled();                                               //是否已经取消boolean isDone();                                                    //是否已完成

위 내용은 자바 멀티스레딩에 대한 토론의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.