@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은 실행 가능한 작업을 나타냅니다.
@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는 인터페이스할 수 있기 때문입니다. 반환 값이 있는 상황을 처리하는 데 사용되는 호출 가능 유형 매개변수
@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 중국어 웹사이트의 기타 관련 기사를 참조하세요!