启动线程的三种方式 您所在的位置:网站首页 资源管理器的启动有哪几种方式 启动线程的三种方式

启动线程的三种方式

2024-07-17 20:40| 来源: 网络整理| 查看: 265

文章目录 前言一、启动线程的第一种方法:继承Thread类二、启动线程的第二种方式:实现Runnable接口三、启动线程的第三种方式:实现Callable接口

前言

启动线程一共有三种方法:继承类,实现接口,匿名内部类。

一、启动线程的第一种方法:继承Thread类

start()方法的作用是启动一个分支线程,在JVM中开辟一个新的栈空间。 只要新的栈空间,myThread.start()瞬间就结束了,线程就启动成功了。 启动成功的线程会自动调用run方法,并且run方法在分支线的栈底部。

代码如下(示例):

public class Thread01 { public static void main(String[] args) { //创建线程对象 MyThread myThread = new MyThread(); //启动线程 myThread.start(); //主线程 for (int i = 0; i " + i); } } } class MyThread extends Thread{ @Override public void run() { for (int i = 0; i "+ i); } } } 二、启动线程的第二种方式:实现Runnable接口

代码如下(示例):

public class Thread02 { public static void main(String[] args) { //创建线程对象 Thread thread = new Thread(new MyRunnable()); //启动线程 thread.start(); //主线程 for (int i = 0; i " + i); } } } class MyRunnable implements Runnable{ @Override public void run() { for (int i = 0; i "+ i); } } }

实现接口启动线程是最常用的方法

也可以使用匿名内部类的方式启动线程

代码如下(示例):

public class Thread03 { public static void main(String[] args) { Thread thread = new Thread(new Runnable() { @Override public void run() { for (int i = 0; i " + i); } } }); //启动线程 thread.start(); //主线程 for (int i = 0; i "+ i); } } } 三、启动线程的第三种方式:实现Callable接口 import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; /*** * 启动线程的第三种方法:实现Callable接口,重写call()方法 */ public class ThreadTest04 { public static void main(String[] args) { //创建一个“未来任务类”对象 FutureTask futureTask = new FutureTask(new Callable() { @Override public Object call() throws Exception { //call()方法相当与run()方法,比run方法好,有返回值 System.out.println("call mothed begin!"); Thread.sleep(1000 * 10); System.out.println("call mothed over!"); int x = 100; int y = 200; return x + y;//自动装箱 } }); //创建线程对象 Thread t = new Thread(futureTask); //启动线程 t.start(); Object obj = null; //获得分支线程返回值 try { //get()方法的执行会导致主线程的阻塞 obj = futureTask.get(); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } System.out.println("获得分支线程的返回值:" + obj ); //如下的代码会等到分支线程执行结束后,才回到主线程中继续执行 System.out.println("Hello CSDN"); } }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有