不同于操作系统,Java是在语言级提供了线程创建和管理支持功能的为数不多的一种语言(真的吗?)。不过由于线程是由Java虚拟机(JVM)而不是由用户级库或内核来管理的,所以很难清楚地将Java线程规划为用户级或内核级。 这里 ,将Java线程作为严格用户级或内核级模型的另一种选择。 其实 Java线程是映射到底层内核线程的。
所有Java程序至少由一个控制线程组成。即使一个只包含main方法的简单Java程序也是JVM中作为一个单独线程运行的。另外,Java提供了命令以允许开发人员在程序创建和管理其他控制线程。
5.8.1 线程创建
明确地创建线程的一种方法是创建一个 新类以继承类Thead,并改写类Thread的方法run。
这个方法如下面这段程序。
class Summmation extends Thread
{
public Summation(int n){
upper = n;
}
public void run(){
int sum = 0;
if(upper>0){
for(int i = 1;i <=upper; i++)
sum += i;
}
System.out.println("The sum of" + upper + "is" + sum);
}
private int upper;
}
public class ThreadTester:
{
public static void main(String[] args){
if(args.lenght>0){
if(Integer,parseInt(args[0]<0))
System.err.println(args[0]+"must be>0.");
else{
Summation thrd = new Summation(Integer.parseInt(args[0]));
thrd.start();
}
}
else
System.err.println("Usage:Summation<integer value>");
}
}
这一派生类的对象可作为独立控制线程在JVM中运行。不过,创建从类Thread派生的对象并不特别的创建新线程;只有在调用start方法之后,才真正创建了新线程。调用新对象的start方法能做如下两件事:
- 它在JVM中分配内存并初始化新线程。
- 它调用run方法,以便线程能合法地为JVM所运行。(注意你不能直接调用run方法。而是调用start方法,其实自动调用run方法)
当累加程序运行时,JVM创建了两个线程。第一个是与应用程序相关的线程,该线程通过方法main开始执行。第二个线程是通过显示调用start方法而创建的线程Summation。线程Summation通过其run方法开始执行。线程从此run方法中退出时终止运行。
5.8.2 JVM与主机操作系统
典型的JVM实现建立在主机操作系统上。这种设置允许JVM隐藏支持操作系统的实现细节,并创建一个一致的,抽象的环境以允许Java程序能在任何支持JVM的平台上运行,JVM规范并没有指出Java线程如何映射到支撑操作系统,而是留给特定的JVM实现来决定。从Solaris 2.6上JVM1.1版本开始, 它采用了多对多模型来实现。
来源:CSDN
作者:weixin_38965811
链接:https://blog.csdn.net/weixin_38965811/article/details/104173229