概述
线程的创建方式
总结一下多线程的创建方式,多线程的实现一共四种方法,接下来将详谈一下创建的方式
1、继承Thread类,而后覆写run()方法
2、实现Runnable接口,而后覆写run()方法
3、实现callable接口,而后覆写call<v>方法
4、线程池(后面专门说,因为较复杂)
注意:无论使用哪种方式创建线程,启动线程一律使用Thread类提供的start()方法。
1.继承Thread类覆写run方法
class MyThread extends Thread {
private String title;
private int ticket = 20;
public MyThread(String title) {
this.title = title;
}
public void run() { //放每个线程的子任务
while (ticket > 0) {
System.out.println("当前线程为"+title+",还剩下"+ticket--+"票");
}
}
}
public class ThreadTest {
public static void main(String[] args) {
MyThread myThread1 = new MyThread("黄牛A");
MyThread myThread2 = new MyThread("黄牛B");
MyThread myThread3 = new MyThread("黄牛C");
myThread1.start();
myThread2.start();
myThread3.start();
}
}
登录后复制
2.实现Runnable接口覆写run方法
class MyRunnable implements Runnable{
@Override
public void run() {
for(int i =0;i <10;i++){
System.out.println(Thread.currentThread().getName()+"、i="+i);
}
}
}
public class RunnableTest {
public static void main(String[] args) {
Runnable runnable =new MyRunnable(); //向上转型
new Thread(runnable,"线程A").start(); //设置线程名字
new Thread(runnable).start(); //没有设置线程名字,则是系统默认从 Thread-(0,1,2...)
Thread thread1 = new Thread(runnable);
thread1.setName("线程B"); //调用setName()设置名字
thread1.start();
}
}
登录后复制
这里呢顺便介绍了线程名字的创建3种:
(1)在括号后直接加名字
(2)调用setName()设置名字
(3)不设置名字,则是系统默认从Thread-(0,1,2....)
3.实现Callable接口覆写call<V>方法
class MyCallable implements Callable<String>{
private int ticket =20;
@Override
public String call() throws Exception {
while(ticket > 0){
System.out.println(Thread.currentThread().getName()+"还剩下"+ticket--+"票");
}
return "票卖完了,再见";
}
}
public class CallableTest {
public static void main(String[] args) throws ExecutionException, InterruptedException {
//产生Callable对象
MyCallable myCallable = new MyCallable();
//产生FutureTask对象
FutureTask futureTask = new FutureTask(myCallable);
Thread thread = new Thread(futureTask);
thread.start();
System.out.println(futureTask.get()); //接收Callable对象的返回值
}
}
登录后复制
1.先产生Callable对象
2.产生FutureTask对象
3.创建Thread传入FutureTask对象
4. 接收Callable接口的返回值是Future中get()方法
三个创建线程的方式比较
1.继承Thread类有单继承局限,相对而言实现Runnable接口更加灵活,并且Thread类本身也实现了Runnable接口辅助真实线程类
2.实现Runnable接口可以更好的实现程序共享的概念
3.Callable接口就是需要有返回值时用到
以上内容若有明显错误请指出,不胜感激。谢谢!
最后
以上就是温暖山水为你收集整理的多线程-线程的创建的全部内容,希望文章能够帮你解决多线程-线程的创建所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复