一.线程的概念模型
a.虚拟的CPU,由java.lang.Thread类封装和虚拟
b.CPU所执行的代码,传递给Thread类对象
c.CPU所处理的数据,传递给Thread类对象
二.线程体
Java的线程是通过java.lang.Thread类来实现的
每个线程都是通过某个特定Thread对象所对应的方法run()来完成其操作的,方法run()称为线程体(即线程的可执行代码)
三.多线程
四.主线程
在任何Java程序启动时,一个线程立刻运行(即main方法对应的线程),该线程通常称为程序的主线程。
主线程的特点:
a.它是产生其他子线程的线程
b.它不一定是最后完成执行的线程,子线程可能在它结束之后还在运行。
五.创建线程
有两种方法用来创建线程:
a.声明一个Thread类的子类,并覆盖run()方法
class mythread extends Thread {
public void run() {/*覆盖访方法*/}
}
b.声明一个实现Runnable接口的类,并实现run()方法
class mythread implements Runnable {
public void run() {/*覆盖访方法*/}
}
用start()方法启动线程:
Thread t1=new Thread();
t1.start();
六.Java.lang.Thread类
常用方法:
public void start():启动该线程,将导致run方法被自动调用。该方法将立即返回,新线程将运行。
public void run():必须覆盖该方法,在方法体中添加你想要在该线程中执行的代码。
public void interrupt()://用于将一个中断请求发送给线程,不安全的,Java文档中不建议用。
public final void join(long millis) throws InterruptedException:使某个线程等待指定的时间。调用某线程的该方法,将当前线程与该线程“合并”,即等待该线程结束,再恢复当前线程的运行。
public static void yield():使当前正在执行的线程临时暂停,以使其它的线程运行。
实例1:
package com.bijian.thread; //主类和线程类分开写 public class TestThread01 { public static void main(String[] args) { Thread t = new MyThread01(); t.start(); } } class MyThread01 extends Thread{ public void run() { for(int i=0;i<5;i++) { System.out.println("SubThread:" + i); } } }
运行结果:
SubThread:0 SubThread:1 SubThread:2 SubThread:3 SubThread:4
实例2:
package com.bijian.thread; //主类和线程类合并 public class MyThead02 extends Thread { public static void main(String[] args) { Thread t = Thread.currentThread(); System.out.println("主线程是:" + t); Thread ex = new MyThead02(); ex.start(); } public void run() { System.out.println("子线程是:" + this); } }运行结果:
主线程是:Thread[main,5,main] 子线程是:Thread[Thread-0,5,main]
七.Java.lang.Runnable接口
该接口只有一个方法:public void run();
实现该接口的类必须覆盖该方法。
实现了Runnable接口的类并不具有任何天生的线程处理能力,这与那些从Thread类继承的类是不同的。
为了从一个Runnable对象产生线程,必须再单独创建一个线程对象,并把Runnbale对象传递给它。
实例3:
package com.bijian.thread; //主类和线程类分开写 public class TestThread03 { public static void main(String[] args) { MyThread03 r = new MyThread03(); Thread t = new Thread(r); t.start(); } } class MyThread03 implements Runnable { public void run() { for(int i=0;i<3;i++) { System.out.println("子线程No." + i); } } }运行结果:
子线程No.0 子线程No.1 子线程No.2
实例4:
package com.bijian.thread; public class MyThread04 implements Runnable { public static void main(String[] args) { MyThread04 r = new MyThread04();//生成线程类(也就是本类)对象r Thread t = new Thread(r);//创建线程对象,把线程类对象r作为参数传递给它 t.start();//启动线程t,它会自动调用线程类对象r的run方法 } public void run() { for(int i=0;i<3;i++) { System.out.println("子线程No." + i); } } }运行结果:
子线程No.0 子线程No.1 子线程No.2
八.两种创建线程方法的比较
a.使用Runnable接口
可以将代码和数据分开,形成清晰的模型
还可以从其他类继承
保持程序风格的一致性
b.直接继承Thread类
不能再从其他类继承
编写简单,可以直接操纵线程,无需使用Thread.currentThread()
九.创建多线程
实例:
package com.bijian.thread; public class TestThread05 {//主类 public static void main(String[] args) { Runner r = new Runner();//生成线程类对象r Thread t1 = new Thread(r);//创建线程对象t1 Thread t2 = new Thread(r);//创建线程对象t2 t1.start();//启动线程t1 t2.start();//启动线程t2 } } class Runner implements Runnable {//线程类 public void run() { for(int i=0;i<3;i++) { System.out.println("No." + i); } } }
运行结果:
No.0 No.1 No.2 No.0 No.1 No.2
十.多线程共享数据和代码
对上例进行分析,可以得到下表:
线程 |
虚拟CPU |
代码 |
数据 |
t1 |
Thread类对象t1 |
Runner类中的run方法 |
Runner类型对象r |
t2 |
Thread类对象t2 |
Runner类中的run方法 |
Runner类型对象r |
相关推荐
总之,Java多线程入门需要理解线程的基本概念、创建与管理,以及线程间通信和同步的各种机制。通过阅读《Java线程入门.pdf》这样的学习资料,结合实际编程实践,可以逐步掌握这门技术。在学习过程中,参考《E书说明....
### Java多线程入门知识点详解 #### 一、引言 多线程是现代软件开发中的重要技术之一,尤其在Java编程语言中占有极其重要的地位。对于任何一位Java程序员而言,掌握多线程的基本概念和技术是非常必要的。本文将...
Java多线程是Java编程中不可或缺的一部分,它允许程序同时执行多个任务,从而提高系统效率和响应速度。本文将从进程、线程的基本概念、Java中的多线程支持以及如何创建和控制线程等方面,为你提供一个入门级别的教程...
必知必会的多线程入门基础知识
Java多线程是Java开发中的重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在Java中,实现多线程有两种主要方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当一个类继承了Thread...
1. Java多线程学习(一)Java多线程入门 2. Java多线程学习(二)synchronized关键字(1) 3. Java多线程学习(二)synchronized关键字(2) 4. Java多线程学习(三)volatile关键字 5. Java多线程学习(四)...
"Java多线程入门知识及示例程序" Java多线程是一种非常重要的编程技术,它可以帮助开发者创建高效、可扩展的程序。多线程的出现是为了解决某些问题,如图形界面的出现、输入、输出的阻塞和多核CPU的更好利用等。 ...
【JAVA多线程入门】章节主要讲解了计算机基础和多线程的概念,这对于理解Java多线程编程至关重要。首先,程序是由编程语言编写的,它需要加载到内存中执行,指令由CPU的指令寄存器处理,数据在数据寄存器中处理。...
内含 chapter02-chapter18 共 17 个实例性源码项目,内容循序渐进,由入门到精通。尤其适合于没有 Java 线程开发经验的朋友。自己动手敲出本资源解压缩后的 ...相信你理解了此源码之后,即可步入 Java 多线程开发。
### Java线程入门知识点详解 #### 一、Java线程基础知识概述 **1.1 什么是线程?** 线程是程序执行流的最小单元,是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。在Java中...
以下是对Java线程入门的详细讲解: 1. **线程的基本概念**: - 线程是操作系统分配CPU时间的基本单元,一个进程可以包含一个或多个线程。 - 在Java中,每个应用程序至少有一个主线程,它负责启动和控制其他线程。...
Java多线程是Java编程中的重要概念,尤其在开发高效并发应用程序时不可或缺。在这个入门程序中,我们将探讨Java如何创建和管理线程,...这个入门程序是很好的起点,它将引导你逐步理解Java多线程的核心概念和实践技巧。
随着现代处理器的生产工艺从提升...《Java多线程编程实战指南(核心篇)》适合有一定Java语言基础的读者作为入门多线程编程之用,也适合有一定多线程编程经验的读者作为重新梳理知识结构以提升认知层次和参考之用。
黑马+传智 Java入门到精通视频教程+课件+代码,30套Java开发项目代码,Java多线程与并发库高级应用视频教程,及电子书,面试题,开发工具等
### Java线程入门知识点详解 #### 一、Java线程概览 - **目标读者**:本教程面向那些已经熟练掌握Java语言基本应用但对多线程编程尚不熟悉的程序员。 - **主要内容**:本教程将从零开始介绍Java线程的基础知识,...
### Java多线程编程及入门知识点详解 #### 一、多线程基础知识 **1.1 什么是线程?** 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。一个进程可以拥有多个线程,每个...
Java多线程是Java编程中的重要组成部分,它允许程序同时执行多个任务,从而提升系统效率。本资料旨在为初学者提供全面的多线程基础知识,帮助开发者快速掌握并实际运用多线程技术。 首先,我们要了解多线程的基本...
- Java提供了线程安全的集合类,如ConcurrentHashMap、CopyOnWriteArrayList等,它们在内部实现了线程同步,可以在多线程环境下安全地使用。 以上内容涵盖了Java线程的基本概念、创建方式、生命周期、同步机制、...