java多线程基础知识(1)
2021/12/16 22:13:25
本文主要是介绍java多线程基础知识(1),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
实现多线程的方式
Thread的构造方法
//分配一个新的 Thread对象。 Thread() //分配一个新的 Thread对象。 Thread(Runnable target) //分配一个新的 Thread对象。 Thread(Runnable target, String name) //分配一个新的 Thread对象。 Thread(String name) //分配一个新的 Thread对象。 Thread(ThreadGroup group, Runnable target) //分配一个新的 Thread对象,使其具有 target作为其运行对象,具有指定的 name作为其名称,属于 group引用的线程组。 Thread(ThreadGroup group, Runnable target, String name) //分配一个新的 Thread对象,以便它具有 target作为其运行对象,将指定的 name正如其名,以及属于该线程组由称作 group ,并具有指定的 堆栈大小 。 Thread(ThreadGroup group, Runnable target, String name, long stackSize) //分配一个新的 Thread对象。 Thread(ThreadGroup group, String name)
其中最常用的是空参的构造和传入一个runnable接口这种方式。需要注意的是Thread也实现了Runnable接口,所以也可以传入一个Thread类的对象。
继承Thread类方式
public class Mythread extends Thread{ @Override public void run() { super.run(); System.out.println("myThread"); } } public class TestThread { public static void main(String[] args) { Mythread mythread=new Mythread(); mythread.start(); } }
实现Runable接口
public class MyRunnable implements Runnable{ @Override public void run() { System.out.println("myRunnable"); } } public class TestThread { public static void main(String[] args) { Thread thread=new Thread(new MyRunnable()); thread.start(); } }
使用Callable和Future创建线程
具体是创建Callable接口的实现类,并实现call方法,并且使用FutureTask类来包装Callable实现类的对象,最后把FutureTask对象作为Thread的target来创建线程,如下:
public class MyCallable implements Callable { @Override public Object call() throws Exception { System.out.println("myCallable"); return "hello callable"; } } public class TestThread { public static void main(String[] args) { Callable callable=new MyCallable(); FutureTask futureTask=new FutureTask(callable); Thread thread=new Thread(futureTask); thread.start(); try { Object object = futureTask.get(); //获取call方法的返回值 System.out.println(object); //hello callable }catch (Exception e) { e.printStackTrace(); } } }
以上就是实现多线程的三种方式。
第三种方式之所以可以,是因为FutureTask实现了Runnable接口而已。
多线程的常用方法
currentThread()
可以返回代码段正在被哪个线程调用的信息,如下:
public class Mythread extends Thread{ public Mythread(){ System.out.println("构造:"+Thread.currentThread().getName()); //构造:main } @Override public void run() { super.run(); System.out.println(Thread.currentThread().getName()); //Thread-0 } /** 从运行结果可以看出,Mythread类的构造方法是被main线程调用的,而run方法是被Thread-0线程调用的,run方式是自动调用的方法 */ } public class TestThread { public static void main(String[] args) { Mythread mythread=new Mythread(); mythread.start(); System.out.println(Thread.currentThread().getName()); //main } }
这篇关于java多线程基础知识(1)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)
- 2024-05-30【Java】百万数据excel导出功能如何实现
- 2024-05-30我们小公司,哪像华为一样,用得上IPD(集成产品开发)?
- 2024-05-30java excel上传--poi
- 2024-05-30安装笔记本应用商店的pycharm,再安排pandas等模块,说是没有打包工具?
- 2024-05-29java11新特性
- 2024-05-29哪些无用敏捷指标正在破坏敏捷转型?
- 2024-05-29鸿蒙原生应用再新丁!新华社 入局鸿蒙
- 2024-05-29设计模式 之 迭代器模式(Iterator)