今天就跟大家聊聊有关如何实现多线程-线程的创建,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
线程的创建方式
总结一下多线程的创建方式,多线程的实现一共四种方法,接下来将详谈一下创建的方式
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接口就是需要有返回值时用到
看完上述内容,你们对如何实现多线程-线程的创建有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。