`
wwty
  • 浏览: 542959 次
  • 性别: Icon_minigender_1
  • 来自: 北京-郑州
社区版块
存档分类
最新评论

java线程模型

阅读更多

Java运行时系统实现了一个用于调度线程执行的线程调度器,用于确定某一时刻由哪一个线程在CPU上运行。
注意线程一般都是靠操作系统调度完成的,但是java实现了自己的线程调度模型,即抢占式调度模型

 

抢占式调度模型

在java技术中,线程通常是抢占式的而不需要时间片分配进程(分配给每个线程相等的CPU时间的进程)。抢占式调度模型就是许多线程处于可以运行状态(等待状态),但实际上只有一个线程在运行。该线程一直运行到它终止进入可运行状态(等待状态),或者另一个具有更高优先级的线程变成可运行状态。在后一种情况下,低优先级的线程被高优先级的线程抢占,高优先级的线程获得运行的机会。


Java线程调度器支持不同优先级线程的抢先方式,但其本身不支持相同优先级线程的时间片轮换
Java运行时系统所在的操作系统(例如:Windows2000)支持时间片的轮换,则线程调度器就支持相同优先级线程的时间片轮换。

 

关于操作系统时间片段的轮换

在程序的执行过程当中,某一个时刻只能有一个线程运行,那为什么我们在启动多个进程或者一个进程多个线程的时候,我们看到这几个进程或线程在同时运行呢?

这是因为在单个CPU的情况下,操作系统决定会在一个极短的时间片段中执行一个线程,那么当这个时间片段运行结束以后,系统会决定运行其他的一个线程。因为这个时间片段很短,频繁着发生切换,给我们的感觉就好象是这几个线程同时在运行一样。


问题:既然在单CPU情况下,某一个时刻只能有一个线程运行,那么我们为什么要设计多线程呢?我们能不能够设计多进程来代替多线程呢?
我们在程序设计的时候应该考虑到程序的可移植性,当这个程序放到多CPU平台下的时候,同时运行多个线程,从而达到真正意义上的并发运行。

 

示例:

Thread类

static void yield() 暂停当前正在执行的线程对象,并执行其他线程。 

void setPriority(int newPriority) 更改线程的优先级。

静态常量:

static int MAX_PRIORITY 10
          线程可以具有的最高优先级。
static int MIN_PRIORITY 1
          线程可以具有的最低优先级。
static int NORM_PRIORITY 5
          分配给线程的默认优先级。

class MultiThread
{
	public static void main(String[] args)
	{
		MyThread mt=new MyThread();
		mt.setPriority(Thread.MAX_PRIORITY);
		mt.start();
		int index=0;
		while(true)
		{
			System.out.println("main:"+Thread.currentThread().getName());
		}
	}
}

class MyThread extends Thread
{
	public void run()
	{
		while(true)
		{
			System.out.println(Thread.currentThread().getName()+":"+index++);
			yield();
		}
	}
}

 执行结果:

Thread-0

。。。。。

。。。。。

main:main

Thread-0

。。。。。

。。。。。

这个例子很有力的说明了java线程的抢占式调度模型,在MyThread 类中的run方法当中调用了父类Thread的yield();用于释放当前的线程资源,让其他线程执行,MyThread 虽然释放了线程,但是main线程仍然没有被执行,MyThread 同时又获得了执行的资格,原因就在于mt.setPriority(Thread.MAX_PRIORITY);设置了MyThread 的线程优先级别高于main线程。

但是问题又来了:就是抢占式调度模型并不绝对,main线程还是会在MyThread 线程执行一段时间之后,偶尔能够获得执行的资格,从打印语句上就可以看出来

 

总结:java的多线程实现是基于抢占模型的,但是并不绝对,因此想根据抢占模型实现某种绝对的抢占线程是不行的。

分享到:
评论

相关推荐

    2022年Java线程模型缺陷Java教程.docx

    Java线程模型的缺陷主要体现在其非面向对象的设计和对并发编程支持的不足。在Java中,线程通常被视为独立的run()方法执行实体,而非与对象紧密关联的组件。这种设计导致开发者在处理异步信息和同步控制时面临挑战。 ...

    Java线程模型缺陷

    Java 编程语言的线程模型可能是此语言中最薄弱的部分。它完全不适合实际复杂程序的要求,而且也完全不是面向对象的。本文建议对 Java 语言进行重大修改和补充,以解决这些问题。 Java 语言的线程模型是此语言的一个...

    Java同步线程模型分析与改进 (1).pdf

    7. Java线程模型的优化:本文的主要贡献在于,扩展了Java同步线程模型的语法,提高了Java线程模型的稳定性和可靠性。 8. Java开发者的参考:本文为Java开发者提供了有价值的参考,讨论了Java线程模型的缺陷和改进...

    Java同步线程模型分析与改进

    目前普遍采用急救包(Band-Aid)类库的方式解决Java 线程模型存在的同步问题,但类库中的代码很难或无法实 ...通过扩展语法方法解决了同步问题,以确保使用Java线程所开发的 程序的稳定、可靠和可优化。

    java线程.rar

    Java线程模型是基于操作系统的原生线程模型构建的,这意味着每个Java线程通常映射到操作系统的一个线程。 1. **线程的创建与启动** - **通过`Thread`类创建**:直接继承自`Thread`类并重写其`run()`方法,然后创建...

    java自定义线程模型处理方法分享

    Java自定义线程模型在软件开发中扮演着重要的角色,特别是在高性能、高并发的应用场景,如游戏服务器。本文将深入探讨如何在Java中构建自定义线程模型,并分享一些实践经验。 首先,我们要明白为什么要自定义线程...

    JAVA多线程模型详解

    Java线程具有创建、就绪、运行、阻塞和死亡五种状态。创建状态是指用new操作创建了一个Thread实例,但尚未调用start()方法;就绪状态是指线程可以运行,但CPU还未分配时间片;运行状态是指线程获得CPU时间片,正在...

    java线程.pdf

    Java线程模型主要包括以下几个方面: 1. **线程生命周期**:Java线程具有不同的生命周期状态,包括新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Terminated)等状态。 2. **线程优先级...

    第15讲 Java多线程.ppt

    Java线程模型: * 线程是虚拟的CPU,由java.lang.Thread类封装和虚拟CPU来实现。 * CPU所执行的代码传递给Thread类对象,CPU所处理的数据传递给Thread类对象。 创建和启动Java线程: * 可以使用extends Thread...

    threadmodel:java线程模型

    Java线程模型是Java编程中一个非常重要的概念,它涉及到多任务处理和并发执行。在Java中,线程模型的设计和实现对程序的性能、可扩展性和资源利用有着深远的影响。"threadmodel"项目旨在深入解析Java中的BIO( ...

    Java线程

    Java线程模型主要包括三个部分:线程体(Runnable接口或Thread类)、线程控制块(Thread对象)和虚拟机的线程调度器。线程体负责定义线程的行为,线程控制块用于存储线程的状态,而线程调度器则负责调度线程的执行。...

    Java线程 高级使用

    #### 二、Java线程模型 - **线程模型**:Java中的线程模型主要包括线程对象、线程状态、线程同步机制等。 - **线程对象**:通过`java.lang.Thread`类或实现`Runnable`接口创建线程。 - **线程状态**:Java线程有...

    java多线程经典模型生产者消费者

    java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型...

    java多线程的使用和介绍

    - **Java中的线程模型**:Java线程模型主要基于`Thread`类和`Runnable`接口。创建线程有两种基本方法:继承`Thread`类或实现`Runnable`接口。 #### 多线程在.NET里如何工作? 在.NET框架中,线程通过`System....

    Java同步线程模型分析与改进.pdf

    "Java同步线程模型分析与改进" Java同步线程模型是Java语言中的一种多线程机制,能够提高计算机资源的使用效率和处理速度。但是,Java多线程模型也存在一些缺陷,例如死锁问题等。因此,需要对Java同步线程模型进行...

    java线程-Java内存模型

    Java线程-Java内存模型是Java并发编程中的关键概念,它描述了多个线程如何共享和访问内存资源,以及如何保证数据的一致性和安全性。Java内存模型(JMM)是Java虚拟机规范的一部分,用于定义程序中各个线程对共享变量...

    Java编程详细教程Java线程PPT教案学习.pptx

    本资源提供了 Java 编程详细教程中的 Java 线程部分的详细知识点,涵盖了多线程基本概念、Java 线程模型、创建线程、两种线程创建方式的比较、线程状态等内容,对 Java 编程的学习和研究具有非常重要的参考价值。

    Java线程总结.pdf

    关于操作系统平台,Java线程模型和底层平台的线程模型有关,例如Windows和Linux使用不同的机制实现线程,但Java提供了统一的线程模型。在跨平台的Java程序中,开发者不需要关心底层线程模型的具体差异,可以专注于...

Global site tag (gtag.js) - Google Analytics