>Java >java지도 시간 >Java가 스레드를 생성하는 방법에 대한 예제 분석

Java가 스레드를 생성하는 방법에 대한 예제 분석

PHPz
PHPz앞으로
2023-05-13 16:52:061110검색

Inherit Thread, 여기에서는 익명 내부 클래스

@Slf4j(topic = "c.Test1")
public class Test1 {
    public static void main(String[] args) {
        //创建线程对象
        Thread t = new Thread(){
            @Override
            public void run() {
                //要执行的任务
                log.debug("running");
            }
        };
        //设置线程的名字
        t.setName("t1");
        //启动线程
        t.start();
        log.debug("running");
    }
}
/*
19:44:31.998 [main] DEBUG c.Test1 - running
19:44:31.998 [t1] DEBUG c.Test1 - running
*/

를 사용하여 Runnable 인터페이스를 구현하고 Thread 클래스와 협력합니다. 또한 익명 내부 클래스

  • 를 사용하여 스레드와 작업을 분리합니다.

  • 스레드는 스레드를 나타냅니다.

  • Runnable은 실행 가능한 작업을 나타냅니다.

@Slf4j(topic = "c.Test2")
public class Test2 {
    public static void main(String[] args) {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                //要执行的任务
                log.debug("running");
            }
        };
        //创建线程对象
        Thread t = new Thread(runnable, "t2");
        //启动线程
        t.start();
    }
}
//19:52:27.646 [t2] DEBUG c.Test2 - running

javajava에서 @FunctionalInterface @FunctionalInterface 주석은 인터페이스에 하나의 추상 메소드만 있음을 의미하며 이는 람다람다 표현식으로 단순화할 수 있습니다.

@Slf4j(topic = "c.Test2")
public class Test2 {
    public static void main(String[] args) {
        Runnable runnable = () -> {
            //要执行的任务
            log.debug("running");
        };
        //创建线程对象
        Thread t = new Thread(runnable, "t2");
        //启动线程
        t.start();
    }
}

FutureTask는 Thread

와 협력합니다. 왜냐하면 FutureTask는 인터페이스할 수 있기 때문입니다. 반환 값이 있는 상황을 처리하는 데 사용되는 호출 가능 유형 매개변수

@Slf4j(topic = "c.Test3")
public class Test3 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        //创建任务对象
        FutureTask<Integer> task = new FutureTask<>(() -> {
            log.debug("running");
            Thread.sleep(1000);
            return 100;
        });
        /*
        用lambda化简前
         */
        FutureTask<Integer> task1 = new FutureTask<>(new Callable<Integer>() {
            @Override
            public Integer call() throws Exception {
                log.debug("running");
                Thread.sleep(1000);
                return 100;
            }
        });
        //参数1是任务的对象, 参数2是线程的名字
        Thread t = new Thread(task, "t3");
        t.run();
        //主线程堵塞,同步等待task执行完毕的结果
        Integer integer = task.get();
        log.debug("结果是:{}", integer);
    }
}

위 내용은 Java가 스레드를 생성하는 방법에 대한 예제 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제