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!
分享到:
相关推荐
4. **泛型**:泛型允许编写可重用的类和方法,其中的数据类型可以在运行时确定。例如: ```java public class Box<T> { private T item; public void set(T item) { this.item = item; } public T get() { ...
- **`interface`**:只包含抽象方法,从Java 8开始可以包含默认实现方法和静态方法,不可以包含状态。 #### 25. `abstract`方法的特性 - **`static`**:不可以,`abstract`方法不能是`static`的。 - **`native`**...
- **`run class [args]`**:开始执行已下载的 Java 类。 - **`step`**:执行当前行。 - **`stopin classID:method`**:在成员函数中设置断点。 - **`stopat classID:line`**:在指定行设置断点。 - **`suspend ...
- **继承Thread类**:创建一个Thread类的子类并重写run方法。 - **实现Runnable接口**:实现Runnable接口的run方法,并将其作为参数传递给Thread构造函数。 2. **同步的实现方法**: - **synchronized关键字**:...
3. **基本语法**:Java的语法结构与C++和C#相似,包括变量声明、数据类型(如int、double、boolean等)、运算符、控制流程(if-else、for、while、switch-case)以及方法定义。 4. **面向对象**:Java是完全面向...
1. Java中的线程操作:题目中提到了`Thread`类的方法,如`run()`、`start()`、`notify()`和`getPriority()`。`run()`方法是线程执行的主要逻辑,而`start()`用于启动线程,`notify()`用于唤醒等待的对象,`...
在这里,`ElectricCar` 类继承了 `Car` 类的所有属性和方法,并新增了一个 `charge()` 方法。 #### 2.3 接口 接口是一种特殊的抽象类,其中只包含常量和抽象方法。实现接口的类必须提供这些抽象方法的具体实现。...
当调用start()方法时,线程应该执行run()方法而不是start()方法。因此,这段代码会导致编译错误,因为它重写了Thread类的start()方法。答案是:C)编译出错,该类还是一个抽象类。 4. 在这段代码中,s1和s2虽然字符...
1. **线程实现方式**:Java中实现多线程的两种常见方法是继承`Thread`类和实现`Runnable`接口。 **详细解析:** Java中有多种方式可以创建线程,最常用的是以下两种: 1. **继承Thread类**:创建一个新的类继承`...
50. 多线程实现:继承Thread类、实现Runnable接口,同步方法有synchronized、Lock等。 51. 同步与异步:同步确保数据一致性,异步提高并发性,根据场景选择。 52. 启动线程用start(),run()直接执行线程体。 53. ...
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程序由类(Class)组成,每个类都包含属性(Fields)和方法(Methods)。程序的入口点是`main`方法。例如: ```java public class HelloWorld { public static void main(String[] args) { System.out....
Google的Gson库提供了一种更优雅的方式来序列化和反序列化Java对象到JSON。首先,我们需要定义与JSON结构对应的Java类,然后使用Gson实例将JSON字符串转换为对象。 ```java public class Person { private ...
Java Socket 是一种常用的网络编程技术,能够实现客户端和服务器端之间的数据传输。在 Java 中,使用 Socket 可以实现对象的传输,这种技术广泛应用于分布式系统、网络游戏和远程调用等领域。本文将详细介绍 Java ...
定义Thread类的子类,重写Thread类的run()方法,创建该子类的实例对象,调用对象的start()方法** 和 **C. 定义一个实现Runnable接口的类并实现run()方法,创建该类实例对象,将其作为参数传递给Thread类的构造方法...
`JsonUtil.parseJson()`方法是关键,它根据JSON字符串解析出对应的Java对象。这个方法可能包含了如下的逻辑: 1. 检查JSON字符串是否有效。 2. 如果是JSON对象,使用`JSONObject`构造器创建对象。 3. 如果是JSON...
C#融合了C和C++的强大功能,同时借鉴了Java的部分特性,拥有高度类型安全性和组件导向编程模型。 #### 二、C#语言基础教程要点 ##### 1. **基本语法** - **变量声明**: 变量是存储数据的基本单元。在C#中,需要先...
- **静态文件与动态文件**:通常,在DNS服务器上会维护一个或多个区域文件来存储域名和对应的IP地址等信息。静态文件是指手动编辑并固定的配置文件;而动态文件则可以根据外部条件(如IP地址的变化)自动更新。 ###...
继承允许一个类(子类)继承另一个类(父类)的属性和方法,封装是将数据和操作数据的方法捆绑在一起,而多态性则意味着同一种行为可以有不同的表现形式。 在Java中,主程序通常始于一个名为`public class Main`的...