声明:本教程不收取任何费用,欢迎转载,尊重作者劳动成果,不得用于商业用途,侵权必究!!!
文章目录
1、Java在语言级提供了对多线程程序设计的支持。
通常线程只是在系统层被实现,我们需要系统给我们提供的特定的编程接口去实现线程
Java是第一个在语言级支持多线程程序设计的编程语言。
2、实现多线程程序的两种方式
(1)从Thread类继承;
(2)实现Runnable接口。
Thread类是java.lang包中的一个类( 注:从api你可以发现Thread类已实现了Runnable接口。)
一个Thread是一个程序当中的执行线程,也就是说一个Thread类的对象就代表了我们进程当中的一个线程,
java虚拟机(JVM)允许一个应用程序可以拥有多个并发运行的线程。
我们的main方法,它也是在一个线程当中被执行的。当一个java虚拟机启动的时候,通常有一个
单一的非后台线程。也就是说当我们的java虚拟机启动的时候,那么就会有一个线程它负责执行
我们的main方法,我们可以打印main方法所在线程的名字看看。
调用start方法启动线程,然后java虚拟机就会调用此线程的run方法,于是里面的代码就会被执行。
我们可以把这个run方法理解为线程的入口函数。而main方法可以理解为程序的入口函数。
打印的线程名字这个Thread-1是Java虚拟机给分配的名字
3、后台线程
mt.setDaemon(true);//在线程启动之前,标记为后台线程
mt.start();
Main方法所在的线程是一个非后台的线程
我们看一下当main方法所在的线程退出的时候,那么我们这个后台线程是否也跟着退出?
刚开始的时候是main方法所在线程和后台线程mt在交替运行,
当我们main方法所在线程终止的时候,那么这个后台线程mt也就跟着在后面终止了。
4、yield方法
一个正在执行的线程可以放弃它执行的权利,让另外一个线程开始运行,
我们可以使用方法yield方法,
我们可以看到每当我们打印mt线程名以后,因为调用了yield方法,让当前线程暂停了,
于是线程发生切换,轮到main方法所在的线程开始执行,当main方法所在线程运行到一段时间之后,
线程又切换到mt线程,当打印mt线程名以后,因为调用了yield方法,让当前线程暂停了,
线程又切换到main方法所在线程......
5、线程优先级
设置线程优先级,它的参数是一个整形。最小为1,缺省为5,最高为10
并不一定要在线程start启动之前进行设置,我们在线程启动之后也可以设置修改线程的优先级。
在java当中如果某个线程优先级较高,那么他将始终获得优先运行的机会。即使设置了yield方法,
它也始终会获得优先运行的机会。
输出观察:
一般有可能在我们强制终止程序的时候,有可能会发现优先级较低的线程运行几次。