java线程一直是一个比较容易困扰的地方,很多初学者都不是很清楚,
在此,我用了几个小试验,来将其基本概念说明一下,首先把run(),start()区分开来,
看看为什么直接调用run()和用start()启动一个线程的差别
1.
package com.dragon;
import java.lang.Thread;
public class ThreadTest extends Thread {
public void run() {
for(int i=0;i<10;i++){
System.out.println("this is a Thread test");
}
}
public static void main(String[] args) {
try {
Thread t = new ThreadTest();
t.run();
System.out.println("main thread is over");
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
输出结果:
this is a Thread test
this is a Thread test
this is a Thread test
this is a Thread test
this is a Thread test
this is a Thread test
this is a Thread test
this is a Thread test
this is a Thread test
this is a Thread test
main thread is over
表明,run()和其他方法的调用没任何不同,main方法按顺序执行了它,并打印出最后一句,
退出程序.下面看看把调用改为start()
2.
package com.dragon;
import java.lang.Thread;
public class ThreadTest extends Thread {
public void run() {
for(int i=0;i<10;i++){
System.out.println("this is a Thread test");
}
}
public static void main(String[] args) {
try {
Thread t = new ThreadTest();
t.start();
System.out.println("main thread is over");
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
输出结果:
main thread is over
this is a Thread test
this is a Thread test
this is a Thread test
this is a Thread test
this is a Thread test
this is a Thread test
this is a Thread test
this is a Thread test
this is a Thread test
this is a Thread test
这表明,start()方法重新创建了一个线程,在main方法执行结束后,由于start()方法创建的
线程没有运行结束,因此主线程未能退出,直到线程 t 也执行完毕,这里要注意,默认创建的
线程是用户线程(非守护线程),再改一下代码
3.
package com.dragon;
import java.lang.Thread;
public class ThreadTest extends Thread {
public void run() {
for(int i=0;i<10;i++){
System.out.println("this is a Thread test");
}
}
public static void main(String[] args) {
try {
Thread t = new ThreadTest();
t.setDaemon(true);
t.start();
System.out.println("main thread is over");
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
输出为:
main thread is over
this is a Thread test
this is a Thread test
this is a Thread test
this is a Thread test
this is a Thread test
this is a Thread test
this is a Thread test
为什么没有打印出十句呢,因为我们将 t 线程设置为了daemon(守护)线程,
程序中只有守护线程存在的时候,是可以退出的,所以只打印了七句便退出了.
再改一下代码
4.
package com.dragon;
import java.lang.Thread;
public class ThreadTest extends Thread {
public void run() {
for(int i=0;i<100;i++){
System.out.println("this is a Thread test");
}
}
public static void main(String[] args) {
try {
Thread t = new ThreadTest();
t.start();
System.out.println("main thread is over");
System.exit(0);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
main thread is over
this is a Thread test
this is a Thread test
this is a Thread test
this is a Thread test
this is a Thread test
this is a Thread test
this is a Thread test
结果可见,用户线程可以被System.exit(0)强制kill掉,所以也只打印出七句.
分享到:
相关推荐
Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,极大地提升了程序的效率和性能。在Java中,实现多线程有两种主要方式:通过实现Runnable接口或者继承Thread类。本案例将深入探讨Java多线程中的关键...
Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应性。本文将深入探讨Java多线程中...通过阅读和分析提供的`java多线程的案例源代码`,可以更直观地了解这些概念在实际中的应用。
### JAVA多线程案例教学详析 #### 一、引言 随着计算机技术的发展,多核处理器已经成为标准配置,为了充分利用硬件资源,提高程序的执行效率,多线程编程成为了现代软件开发中不可或缺的一部分。Java作为一种广泛...
"Java线程案例"这个主题深入探讨了如何在Java中创建、管理和同步线程,这对于理解和掌握多线程编程至关重要。 线程的创建在Java中有多种方式: 1. 继承`Thread`类:创建一个新的类,继承自`Thread`类,重写`run()`...
这个"Java线程通信示例源代码"很可能包含了演示如何在不同线程之间共享数据和协调执行顺序的实例。线程通信主要涉及两个核心概念:同步和互斥。 1. **线程同步**:线程同步是为了防止多个线程同时访问共享资源,...
本文将基于"java 多线程并发实例"这个主题,深入探讨Java中的多线程并发概念及其应用。 首先,我们要了解Java中的线程。线程是程序执行的基本单元,每个线程都有自己的程序计数器、虚拟机栈、本地方法栈,而共享堆...
Java线程有10个优先级(1-10,`Thread.MIN_PRIORITY`到`Thread.MAX_PRIORITY`),但优先级对线程调度的影响并不总是明显,取决于JVM和操作系统。 7. **并发工具类**: `java.util.concurrent`包提供了丰富的并发...
标签“多线程”强调了Java并发编程的核心概念,如线程的创建、同步、通信和状态管理。例如,`synchronized`关键字用于确保对共享资源的互斥访问,防止数据竞争;`wait()`, `notify()`和`notifyAll()`方法用于线程间...
1. **Java线程创建** - **继承Thread类**:创建一个新的类,该类继承自`Thread`类,并重写`run()`方法。然后创建该类的对象并调用`start()`方法启动线程。 - **实现Runnable接口**:创建一个新的类实现`Runnable`...
1. Java多线程编程的基本概念 2. 如何创建和启动线程 3. 如何使用Runnable接口来实现线程的任务 4. 如何使用Thread类来实现线程的执行 5. 如何使用Thread.sleep()方法来暂停线程的执行 6. 如何使用System.out....
#### 理解多线程概念与Java内存模型 多线程,作为现代编程中的一项关键技术,允许在单一应用程序中并发执行多个指令流,每个这样的指令流被称为一个线程。在Java中,线程被视为轻量级进程,与进程相似,它们拥有...
Java网络编程案例教程习题参考答案涵盖了Java网络编程的基础知识点,包括Socket编程、TCP/IP协议、Java Socket类、ServerSocket类、Java网络编程模型、网络编程常见问题、多线程编程、并发编程、Socket选项、网络...
本案例将深入讲解如何在Java中实现多线程并使用线程休眠。 首先,我们需要了解Java中的`Thread`类。`Thread`类是所有线程的基础,我们可以通过继承`Thread`类或者实现`Runnable`接口来创建线程。在这个案例中,我们...
Java线程实例通常包括生产者消费者模型、哲学家就餐问题、银行家算法等经典案例,这些实例有助于理解线程的同步、协作和资源管理。 总结来说,Java线程是Java编程中不可或缺的一部分,理解和掌握线程的创建、同步、...
4. **线程优先级与守护线程**:Java线程有优先级之分,可以影响调度,但实际效果取决于操作系统。守护线程(Daemon Thread)是一种特殊类型的线程,当它是系统中唯一运行的线程时,JVM会自动退出。 5. **并发集合与...
Java多线程是Java编程中的核心概念,尤其对于高级开发者来说,掌握多线程的深入理解和应用至关重要。这本书“java多线程进阶”显然旨在帮助读者深化这方面的理解,打通编程中的“任督二脉”,使开发者能够更加熟练地...
下面我们将深入探讨Java多线程的核心概念、同步机制、死锁问题以及wait/notify机制,以"生产者与消费者"的例子来具体阐述。 首先,了解Java中的线程。线程是操作系统分配CPU时间的基本单位,每个线程都有自己的程序...
1. **多线程基础**:论文可能会首先介绍多线程的基本概念,解释为什么在JAVA中需要使用多线程,以及多线程如何提升程序的执行效率。这部分内容可能会涉及到线程的创建、启动、同步和通信等基础知识。 2. **JAVA多...
- **主要内容**:本教程将从零开始介绍Java线程的基础知识,包括线程的概念、为何使用线程以及如何编写简单的多线程程序。此外,还将深入探讨更高级的主题,如线程间的通信机制、数据同步方法等。 #### 二、线程...