`
雨过天晴0521
  • 浏览: 159401 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于Thread类

 
阅读更多
1. Thread类也实现了Runnable接口, 因此可以使用Thread(Runnable target)构造函数初始化实例变量.

    public Thread(Runnable target) {
	init(null, target, "Thread-" + nextThreadNum(), 0);
    }


在Thread类中的run方法只判断target是否存在, 如果采用以上构造方法,则target存在,就调用target的run()方法. 要么就被Thread子类的run()方法覆盖.这里用到了命令行模式.

    public void run() {
	if (target != null) {
	    target.run();
	}
    }


2. Thread在调用start()方法后, start()不会立即调用run()方法,而是将这个线程加到线程组, 线程组由JVM创建, 然后调用start0(). 这是个本地方法,"使用native关键字说明这个方法是原生函数,也就是这个方法是用C/C++语言实现的,并且被编译成了DLL,由java去调用。这些函数的实现体在DLL中,JDK的源代码中并不包含,你应该是看不到的。对于不同的平台它们也是不同的。这也是java的底层机制,实际上java就是在不同的平台上调用不同的native方法实现对操作系统的访问的。" "native的意思就是通知操作系统,这个函数你必须给我实现,因为我要使用。所以native关键字的函数都是操作系统实现的,  java只能调用。"  
      

public synchronized void start() {
        /**
	 * This method is not invoked for the main method thread or "system"
	 * group threads created/set up by the VM. Any new functionality added 
	 * to this method in the future may have to also be added to the VM.
	 *
	 * A zero status value corresponds to state "NEW".
         */
        if (threadStatus != 0)
            throw new IllegalThreadStateException();
        group.add(this);
        start0();
        if (stopBeforeStart) {
	    stop0(throwableFromStop);
	}
    }

    private native void start0();


3. 实现Rannable接口方式创建多个线程时,各个线程就可以共享实现类某个实例的实例变量,当然不同实现类实例则仍不共享;继承Thread方式创建多线程,则每个线程都有实现类的实例变量, 但实现类的静态变量仍是被各个线程共享.

补充:

   当在方法中调用一些不是由java语言写的代码或者在方法中用java语言直接操纵计算机硬件时要声明为native方法。本地方法非常有用,因为它有效地扩充了jvm.事实上,我们所写的java代码已经用到了本地方法,在sun的java的并发(多线程)的机制实现中,许多与操作系统的接触点都用到了本地方法,这使得java程序能够超越java运行时的界限。有了本地方法,java程序可以做任何应用层次的任务。

   java中,通过JNI(Java Native Interface,java本地接口)来实现本地化。
Native方法一般用于两种情况:

       1)在方法中调用一些不是由java语言写的代码。
       2)在方法中用java语言直接操纵计算机硬件。

   如果使用了native方法也就丢失了java的方便性和安全性。Native方法的执行依赖于JVM的设计者,比如在sun的JVM中,可以通过JNI(Java Native Interface) API接口来实现本地化。
分享到:
评论

相关推荐

    thread 类

    标题中的“thread 类”指的是Java编程语言中的`Thread`类,它是...以上就是关于Java中`Thread`类及多线程编程的核心知识点。在实际开发中,理解并熟练运用这些概念和技术,能够有效地编写出高效、稳定的多线程程序。

    Thread类创建启用新线程

    Java中的`Thread`类是实现多线程的核心类,通过创建并启动`Thread`对象,我们可以让程序并行运行不同的任务,从而提高程序的效率。本文将深入探讨如何使用`Thread`类来创建和启动新线程。 首先,让我们了解`Thread`...

    继承Thread类构造多线程实例

    这里我们将深入探讨标题所提及的“继承Thread类构造多线程实例”的方法。 1. **线程基础**: - **线程**是程序中的执行单元,每个线程都有自己的程序计数器、系统栈、局部变量等资源,它们共享同一块内存区域,即...

    Java并发编程---Thread类

    ### Java并发编程——Thread类详解 #### 一、线程的状态 在Java并发编程中,了解线程的各种状态对于理解并正确使用`Thread`类至关重要。一个线程在其生命周期中可能会经历以下几种状态: 1. **创建(new)**:当一...

    thread 线程类 实现runnable接口

    "Thread 线程类实现 Runnable 接口" Thread 线程类是 Java 中 Thread 和 Runnable 接口的实现,它提供了线程的基本操作和管理。下面是对 Thread 类的详细介绍: 1. Runnable 接口 Runnable 接口是 Thread 类的...

    vb 多线程 实例(thread 类创建)

    以下是一些关于使用Thread类创建多线程的关键知识点: 1. **创建线程对象**: 首先,我们需要创建Thread类的一个实例,并传递一个委托(Delegate)到构造函数。这个委托指向线程需要执行的方法。例如: ```vb ...

    详解C++ thread用法总结

    std::thread类成员函数: (1)、get_id:获取线程ID,返回一个类型为std::thread::id的对象。 (2)、joinable:检查线程是否可被join。检查thread对象是否标识一个活动(active)的可行性线程。缺省构造的thread对象、...

    这是一个线程类(Thread

    Java中的线程模型是通过`Thread`类来实现的,它为开发者提供了在单个应用程序中执行多个并发任务的能力。本篇文章将深入探讨`Thread`类的使用、线程的创建方法以及`Runnable`接口的实现。 ### 1. `Thread`类概述 `...

    【java学习记录】11.多线程实现阶乘计算(Thread类和Runnable接口)

    本篇文章将深入探讨如何利用`Thread`类和`Runnable`接口来实现阶乘计算的多线程解决方案。阶乘计算是数学中的一个概念,对于非负整数n,其阶乘表示为所有小于等于n的正整数的乘积,记作n!。 首先,我们来看如何使用...

    一个使用thread类的windows应用实例

    本文将深入探讨如何在Windows环境中利用`Thread`类实现多线程,以帮助初学者更好地理解和应用这一技术。 首先,让我们了解什么是多线程。在单线程程序中,任务是按顺序执行的,而多线程则允许多个任务同时运行,...

    Thread类获取时间.txt

    Thread类

    worker_thread_class.zip_c# Thread类_event class

    在"worker_thread_class.zip_c# Thread类_event class"这个压缩包中,我们可能找到了一个名为`ThreadGenerator`的项目,它封装了线程和事件类,以便更有效地控制线程和处理事件。 首先,`Thread` 类是C#中实现多...

    C#多线程学习 Thread类使用 线程等编程方法

    System.Threading命名空间中的Thread类是实现多线程的基础,提供了创建、控制和管理线程的方法。本文将深入探讨C#多线程编程,包括Thread类的使用以及线程同步的相关知识。 ### 1. Thread类介绍 Thread类是C#中处理...

    线程thread demo

    1. 继承`Thread`类:创建一个新的类,继承自`java.lang.Thread`,然后重写`run()`方法。当调用`start()`方法时,该`run()`方法将在新线程中执行。 ```java class MyThread extends Thread { public void run() { ...

    C#多线程之Thread中Thread.IsAlive属性用法分析

    `Thread`类是.NET框架提供的用于创建和管理线程的核心类。其中,`Thread.IsAlive`属性是一个非常重要的成员,它允许开发者检查线程的当前状态,以确定线程是否已经启动并且仍在运行。在理解`Thread.IsAlive`属性的...

    JAVA中使用Thread类和Runnable接口创建多线程

    在Java中创建线程有两种方法:使用Thread类和使用Runnable接口。在使用Runnable接口时需要建立一个Thread实例。因此,无论是通过Thread类还是Runnable接口建立线程,都必须建立Thread类或它的子类的实例。

    用C++实现的Thread类

    用C++实现的具有跨平台兼容性的Thread类,是按照JAVA中Thread类的用法设计的,使用非常方便。仅供学习参考

    CThread实现

    然而,如果你不希望依赖于MFC库,或者想要一个更简洁的线程实现,可以创建自己的线程类,如题目中提到的`CThread`。这里我们将深入探讨`CThread`类的实现以及多线程编程的关键概念。 首先,`CThread`类通常会包含...

    RT-Thread常见问题

    这是因为在执行rt_thread_delay()或rt_thread_sleep()函数时,当指定的时间超时结束时,系统会把这个线程给唤醒,然后统一对这类线程赋了一个-RT_ETIMEOUT的错误号。但是,这并不一定代表是错误。 二、日志输出问题...

    RT-Thread中文文档

    RT-Thread支持多种主流的芯片体系架构,包括但不限于以下几类: - ARMCortex-M0 - ARMCortex-M3/M4/M7 - ARMCortex-R4 - ARMCortex-A8/A9 - ARM920T/ARM926etc - MIPS32 - x86 - Andes - C-Sky - RISC-V - PowerPC ...

Global site tag (gtag.js) - Google Analytics