发布于2021-03-10 18:22 阅读(1047) 评论(0) 点赞(23) 收藏(1)
线程是基本的调度单位,它被包含在进程之中,是进程中的实际运作单位,它本身是不会独立存在。一个进程至少有一个线程,进程中的多个线程共享进程的资源。
Java中创建线程的方式有多种如继承Thread类、实现Runnable接口、实现Callable接口以及使用线程池的方式,线程池将在后面文章中单独介绍,这里先介绍另外三种方式。
优点:在run方法里可以用this获取到当前线程。
缺点:由于Java不支持多继承,所以如果继承了Thread类后就不能再继承其他类。
Copypublic class MyThread extends Thread {
/**
* 线程要执行的任务
*/
@Override
public void run() {
System.out.println("do something...");
}
public static void main(String[] args) {
//创建线程
MyThread myThread = new MyThread();
//启动线程
myThread.start();
}
}
优点:实现Runnable接口后不影响继承其他类,以及有利于多个线程资源共享。
缺点:获取当前线程需要调用Thread.currentThread()。
Copypublic class MyThread implements Runnable {
/**
* 线程要执行的任务
*/
@Override
public void run() {
System.out.println("do something...");
}
public static void main(String[] args) {
//创建两个线程,并指定相同的任务
Thread thread1 = new Thread(new MyThread());
Thread thread2 = new Thread(new MyThread());
//启动线程
thread1.start();
thread2.start();
}
}
优缺点类似于实现Runnable接口,但是实现Callable接口可以有返回值。
Copypublic class MyThread implements Callable<String> {
/**
* 线程要执行的任务,并且具有返回值
*/
@Override
public String call() throws Exception {
System.out.println("do something...");
Thread.sleep(3000);
return "我是返回值";
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
//创建异步任务
FutureTask<String> futureTask = new FutureTask(new MyThread());
//启动线程
new Thread(futureTask).start();
//阻塞等待线程执行完成并返回结果
String result = futureTask.get();
System.out.println(result);
}
}
作者:木得事
链接:http://www.javaheidong.com/blog/article/112243/cc4436c82b89a97af4dc/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!