本篇內容主要講解“Java創建線程的方式實例分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Java創建線程的方式實例分析”吧!
@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
*/把線程和任務分開
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注解意味著該接口只有一個抽象方法,即可以用lambdalambda表達式的方式簡化
@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可以接口一個Callable類型的參數,用來處理有返回值的情況
@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創建線程的方式實例分析”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。