这篇文章主要介绍“Java线程实现的方法有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java线程实现的方法有哪些”文章能帮助大家解决问题。
Thread 的实现步骤:
定义 Thread 的子类,重写 run()方法,run()方法代表了线程要完成的任务,run()方法称为线程执行体。
创建 Thread 子类的实例,子类对象就是线程。
调用线程对象的 start()方法来启动线程。
public class ThreadDemo extends Thread{ public void run() { for(int i=0;i<10;i++) { System.out.println(currentThread().getName()+":" + i); } } public static void main(String args[]) { new ThreadDemo().start(); new ThreadDemo().start(); }}
Runnable的实现步骤:
定义 Runnable 接口实现类,重写 run()方法,run() 方法代表了线程要完成的任务,run()方法称为线程执行体。
创建 Runnable 实现类的实例,Runnable 本身就是 Thread 类的方法,所以创建线程还要实现一个 Thread 类来包装 Runnable 对象。
调用线程对象的 start() 方法来启动线程。
public class RunnableDemo implements Runnable{ String threadName; public RunnableDemo(String threadName) { this.threadName = threadName; } @Override public void run() { for(int i=0;i<10;i++) { System.out.println(threadName+":" + i); } } public static void main(String args[]) { new Thread(new RunnableDemo("A")).start(); new Thread(new RunnableDemo("B")).start(); }}
从 Java5 开始就提供了 Callable 接口,该接口是 Runnable 接口的增强版,Callable 接口提供一个 call() 方法作为线程执行体,call()方法可以有返回值,call() 方法可以声明抛出异常。
boolean cancel(boolean may)
试图取消该 Future 里关联的 Callable 任务。
V get()
返回 Call 任务里 call() 方法的返回值。调用该方法会照成线程阻塞,必须等待子线程结束后才会得到返回值。
V get(long timeout,TimeUnit unit)
返回 Call 任务里 call() 方法的返回值。该方法让程序最多阻塞 timeout 和 unit 指定的时间,如果经过指定的时间,如果经过指定的时间依然没有返回值,将会抛出 TimeoutException 异常。
boolean isCancelled()
如果在 Callable 任务正常完成前被取消,则返回 true。
boolean isDone()
如果 Callable 任务已完成,则返回 true。
Runnable的实现步骤:
创建 Callable 接口的实现类,并实现 call() 方法,该 call() 方法作为线程的执行体,call() 方法有返回值。
使用 FutrueTask 类包装 Callable 对象。
使用 FutrueTask 对象作为Thread 对象的 target 创建并启动新线程。
启用 FutrueTask 对象的 get() 方法来获得子线程的返回值。
public class CallableDemo implements Callable<Integer> { public static void main(String args[]) { FutureTask<Integer> futureTask = new FutureTask<Integer>(new CallableDemo()); new Thread(futureTask).start(); try { System.out.println("子线程返回值:" + futureTask.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } if (futureTask.isDone()) { System.out.println("线程结束"); } } @Override public Integer call() throws Exception { System.out.println("线程开始"); int ss = 0; for (int i = 0; i < 20; i++) { ss += i; } return ss; }}
关于“Java线程实现的方法有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。