java线程的创建与运行

    科技2023-09-10  116

    继承Thread类的方式

    使用继承的方式,可以方便的处理参数,在自定义的线程类里面可以添加成员变量,通过构造函数或者set方法来给变量设置值。

    public class ThreadTest { public static class MyThread extends Thread { private String info = ""; public MyThread() {} public MyThread(String info) { this.info = info; } @Override public void run() { System.out.println("hello,I am " + info); } } public static void main(String[] args) { MyThread thread = new MyThread("Tim"); thread.start(); } }

    实现Runnable接口的方式

    public class ThreadTest { public static class RunnableTask implements Runnable { private String name = ""; public RunnableTask() {} public RunnableTask(String name) { this.name = name; } @Override public void run() { System.out.println("hello, I am " + name); } } public void doSomething() { String jack = "hello, I am jack"; new Thread(new Runnable() { @Override public void run() { System.out.println(jack); } }).start(); } public static void main(String[] args) { RunnableTask task = new RunnableTask("lucy"); new Thread(task).start(); ThreadTest thread = new ThreadTest(); thread.doSomething(); } }

    FutureTask方式

    这种方式和继承Thread类以及实现Runnable接口方式的区别就是,可以有一个返回值。

    使用FutureTask的步骤:

    创建CallerTask继承自Callable接口创建异步任务new FutureTask<>(new CallerTask)启动线程new Thread(futureTask).start() import java.util.HashMap; import java.util.Map; import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; /** * 本例示范:线程创建和运行 * @author Tim * */ public class ThreadTest { public static class CallerTask implements Callable<String> { @Override public String call() throws Exception { return "hello,"; } } public static class CallerTask2 implements Callable<Map> { @Override public Map call() throws Exception { Map map = new HashMap<>(); map.put("key", "futureTask"); return map; } } public static void main(String[] args) { //创建异步任务 FutureTask<String> futureTask = new FutureTask<>(new CallerTask()); FutureTask<Map> futureTask2 = new FutureTask<>(new CallerTask2()); //启动线程 new Thread(futureTask).start(); new Thread(futureTask2).start(); try { //等待任务执行完毕,并返回结果 String result = futureTask.get(); System.out.print(result); Map map = futureTask2.get(); System.out.println(map.get("key")); } catch (Exception e) { } } }

    这里写了2个Task,返回值的类型有区别。

    Processed: 0.016, SQL: 8