操作系统--Java线程

Deadly 提交于 2020-02-04 22:55:22

不同于操作系统,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方法能做如下两件事:

  1. 它在JVM中分配内存并初始化新线程。
  2. 它调用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版本开始, 它采用了多对多模型来实现。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!