`
taimukang
  • 浏览: 183936 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java thread: run方法和john方法

 
阅读更多

 

 

1、要实现多线程,可以继承Thread类或实现Runnable接口,并且重写run方法,通过调用start方法启动线程,并自动调用run方法。
2、事实上run方法可以被重载,但线程执行时,默认只会调用无参数、无返回值的run方法。而重载的run方法只能显示调用。与其它的方法调用一样,是在调用它的线程中执行的


3、join方法:Waits for this thread to die. 即所等待的线程结束之后才会继续向下执行。

 

下面举例说明:

public class Starter extends Thread{
    private int x = 2;
    public Starter(){
        x = 5;
        start();
    }

    public void run(){
        System.out.println(Thread.currentThread().getName());
        x*=2;
        System.out.println("x = "+x +" after run() method invoked!");
    }
    public void run(int y) throws Exception{
        join();
        System.out.println(Thread.currentThread().getName());
        x-= y;
        System.out.println(x);
    }
    public static void main(String[] args) throws Exception{
        new Starter().run(1);
    }
}

 

output:

Thread-0
x = 10 after run() method invoked!
main
9

 如果不调用join方法

 public void run(int y) throws Exception{
        System.out.println(Thread.currentThread().getName());
        x-= y;
        System.out.println(x);
    }

 

output:

main
4
Thread-0
x = 8 after run() method invoked!

 

这说明如果不调用join方法,主线程不会等待,而是直接执行,而jvm要创建线程需要一定时间,因此一般来说会比较慢。

 

 

    另外需要强调的是,要启动线程,必须调用start方法,通过start方法调用run方法。如果直接调用run方法,并不会启动线程,而是相等于普通都方法调用,都是在主线程中执行。example:

public class Starter extends Thread{
    private int x = 2;
    public void run(){
        System.out.println(Thread.currentThread().getName());
        x*=2;
        System.out.println("x = "+x +" after run() method invoked!");
    }
    public static void main(String[] args) throws Exception{
        new Starter().run();
    }
}

 

output:

main
x = 4 after run() method invoked!

 

 

 

分享到:
评论
1 楼 youshenxuzuo 2014-11-02  
您好, 我有个问题想请教一下。
关于start方法启动线程,自动调用的run方法若需要传递参数,应该怎么办?

相关推荐

    java编程教程doc

    4. **泛型**:泛型允许编写可重用的类和方法,其中的数据类型可以在运行时确定。例如: ```java public class Box<T> { private T item; public void set(T item) { this.item = item; } public T get() { ...

    1000道包含JAVA所有知识点面试的宝典

    - **`interface`**:只包含抽象方法,从Java 8开始可以包含默认实现方法和静态方法,不可以包含状态。 #### 25. `abstract`方法的特性 - **`static`**:不可以,`abstract`方法不能是`static`的。 - **`native`**...

    java 技巧小结荟萃

    - **`run class [args]`**:开始执行已下载的 Java 类。 - **`step`**:执行当前行。 - **`stopin classID:method`**:在成员函数中设置断点。 - **`stopat classID:line`**:在指定行设置断点。 - **`suspend ...

    java程序员滴宝典

    - **继承Thread类**:创建一个Thread类的子类并重写run方法。 - **实现Runnable接口**:实现Runnable接口的run方法,并将其作为参数传递给Thread构造函数。 2. **同步的实现方法**: - **synchronized关键字**:...

    Java:Primeiros Passos em Java

    3. **基本语法**:Java的语法结构与C++和C#相似,包括变量声明、数据类型(如int、double、boolean等)、运算符、控制流程(if-else、for、while、switch-case)以及方法定义。 4. **面向对象**:Java是完全面向...

    郑州世纪创联java笔试题(附答案).docx

    1. Java中的线程操作:题目中提到了`Thread`类的方法,如`run()`、`start()`、`notify()`和`getPriority()`。`run()`方法是线程执行的主要逻辑,而`start()`用于启动线程,`notify()`用于唤醒等待的对象,`...

    以下是一个非常详细的Java语言教程.docx

    在这里,`ElectricCar` 类继承了 `Car` 类的所有属性和方法,并新增了一个 `charge()` 方法。 #### 2.3 接口 接口是一种特殊的抽象类,其中只包含常量和抽象方法。实现接口的类必须提供这些抽象方法的具体实现。...

    Java试题 (3).docx

    当调用start()方法时,线程应该执行run()方法而不是start()方法。因此,这段代码会导致编译错误,因为它重写了Thread类的start()方法。答案是:C)编译出错,该类还是一个抽象类。 4. 在这段代码中,s1和s2虽然字符...

    JAVA面试笔试题

    1. **线程实现方式**:Java中实现多线程的两种常见方法是继承`Thread`类和实现`Runnable`接口。 **详细解析:** Java中有多种方式可以创建线程,最常用的是以下两种: 1. **继承Thread类**:创建一个新的类继承`...

    java面试题综合

    50. 多线程实现:继承Thread类、实现Runnable接口,同步方法有synchronized、Lock等。 51. 同步与异步:同步确保数据一致性,异步提高并发性,根据场景选择。 52. 启动线程用start(),run()直接执行线程体。 53. ...

    Java邮件开发Fundamentals of the JavaMail API

    Course author: Formerly with jGuru.com , John Zukowski does strategic Java consulting for JZ Ventures, Inc. His latest book is titled Java Collections from Apress . Fundamentals of the JavaMail API...

    Java Socket实现传输压缩对象的方法示例

    Java Socket实现传输压缩对象的方法示例是Java Socket编程中的一种常见应用场景,当我们需要在网络上传输对象时,为了提高传输效率和减少带宽占用,我们可以对对象进行压缩然后再传输。本文将详细介绍Java Socket...

    hackerrank:Java

    Java程序由类(Class)组成,每个类都包含属性(Fields)和方法(Methods)。程序的入口点是`main`方法。例如: ```java public class HelloWorld { public static void main(String[] args) { System.out....

    Android应用源码之Android 解析json_dome.zip

    Google的Gson库提供了一种更优雅的方式来序列化和反序列化Java对象到JSON。首先,我们需要定义与JSON结构对应的Java类,然后使用Gson实例将JSON字符串转换为对象。 ```java public class Person { private ...

    Java Socket实现的传输对象功能示例

    Java Socket 是一种常用的网络编程技术,能够实现客户端和服务器端之间的数据传输。在 Java 中,使用 Socket 可以实现对象的传输,这种技术广泛应用于分布式系统、网络游戏和远程调用等领域。本文将详细介绍 Java ...

    2021-2022计算机二级等级考试试题及答案No.17401.docx

    定义Thread类的子类,重写Thread类的run()方法,创建该子类的实例对象,调用对象的start()方法** 和 **C. 定义一个实现Runnable接口的类并实现run()方法,创建该类实例对象,将其作为参数传递给Thread类的构造方法...

    android通过json数据访问服务器

    `JsonUtil.parseJson()`方法是关键,它根据JSON字符串解析出对应的Java对象。这个方法可能包含了如下的逻辑: 1. 检查JSON字符串是否有效。 2. 如果是JSON对象,使用`JSONObject`构造器创建对象。 3. 如果是JSON...

    C#语言教程和经典案例

    C#融合了C和C++的强大功能,同时借鉴了Java的部分特性,拥有高度类型安全性和组件导向编程模型。 #### 二、C#语言基础教程要点 ##### 1. **基本语法** - **变量声明**: 变量是存储数据的基本单元。在C#中,需要先...

    如何实现动态IP的域名解析

    - **静态文件与动态文件**:通常,在DNS服务器上会维护一个或多个区域文件来存储域名和对应的IP地址等信息。静态文件是指手动编辑并固定的配置文件;而动态文件则可以根据外部条件(如IP地址的变化)自动更新。 ###...

    IntroToJava

    继承允许一个类(子类)继承另一个类(父类)的属性和方法,封装是将数据和操作数据的方法捆绑在一起,而多态性则意味着同一种行为可以有不同的表现形式。 在Java中,主程序通常始于一个名为`public class Main`的...

Global site tag (gtag.js) - Google Analytics