一.多线程技能

1.多线程的概念

进程的概念

进程是操作系统结构的基础;是一次程序的执行,它是系统进行资源分配和调度的一个独立单位。

线程

线程可以理解为在进程中独立运行的子任务。比如QQ进程在运行中,有很多子任务同时运行,如,好友视频线程,下载文章线程,数据传输线程等。

单任务的特点就是排队执行,也就是同步。多线程是系统运行效率大大提升,使用多线程就是使用异步。

继承Thread类

  在java的JDK开发包中,已经自带了对多线程技术的支持。实现多线程主要有两种方式,一种是继承Thread类,另一种是实现Runnable接口。

  Thread类的结构:如下

  

  从上面的源代码中可以发现,Thread类实现了Runnable接口,他们之间具有多态关系。

  使用继承Thread类的方式创建多线程时,最大的局限就是不支持多继承,因为java的语言特点就是单继承,所以要实现多继承,完全可以实现Runnable接口的方式。用两种方式创建的线程工作时性质是一样的,没有本质区别。

    继承Thread的第一个Demo

  

run方法执行的时间比较晚,说明使用多线程技术,代码的运行结果与代码的执行顺序或调用顺序是无关的。

线程是一个子任务,CPU以不确定的方式,或者说是以随机的时间来调用线程中的run方法

异步原理:Thread.java类中的start()方法通知“线程规划器”此线程已经准备就绪,等待调用线程对象的run()方法。这个过程就是让系统安排一个时间来调用Thread中的run方法。

线程的启动顺序和执行顺序无关

实现Runnable

  如果欲创建的线程已经有一个父类了,这时就不能再继承自Thread类了,因为Java不支持多继承,所以就需要实现Runnable接口

  

实例变量与线程安全

自定义线程类中的实例变量针对其它线程可以有共享和不共享之分,这在多个线程之间进行交互时是一个技术点

  不共享数据的情况

  

共享数据的情况是多个线程可以访问一个变量,比如实现投票功能的软件时,多个线程可以同时处理同一个人的票数

非线程安全:多个线程对同一个对象中的同一个实例变量就行操作时会出现值被更改,值不同步的情况。

CurrentThread()方法

currentThread()方法可以放回代码正在被哪个线程调用的信息。

  

MyThread.java类中的构造函数是被main线程调用的,而run方法是被名称为Thread-0的线程调用的,run方法是自动调用的方法

isAlive()方法

方法isAlive()的功能是判断当前线程是否处于活动状态。

当线程已经启动并且尚未终止,该线程处于活动状态。

有关多线程中this.getName()和Thread.currentThread().getName()返回名字不一样的问题

至于这里为什么两次this.getName都是Thread-0,我当时就很郁闷,为什么会出现这样的情况呢,,死活想不通,那是因为由于惯

性思维的原因,一直是以为它也是某个线程的名字,然而相同之后却很简单

因为this代表的是当前类这个对象,this.getName()其实就是最简单的方法调用,然而当前对象里面没有这个方法,

又因为继承了Thread方法,所以它执行的就是Thread父类的方法,父类方法如下:

public final String getName() {
    return String.valueOf(name);
}
public Thread() {
    init(null, null, "Thread-" + nextThreadNum(), 0);
}
到这里你应该明白了吧,,Thread-0就是上面init()方法将name的值设置进去。。。

sleep()方法  方法sleep()的作用是在指定的毫秒数内让当前正在执行的线程进行休眠这个正在执行的线程是指this.currentThread()返回的线程。

getId()方法    getId()方法的作用是去的线程的唯一标识。  

 
时间: 2024-10-12 19:18:06

一.多线程技能的相关文章

多线程技能

1.什么是进程?什么是线程? 我们可以把计算机上每一个正在进行的任务看做一个进程,比如说听音乐.做PPT.玩游戏等等.进程是受操作系统管理的基本运行单元. 而什么是线程呢? 线程是进程中独立的子部分,可以共享进程中的资源,而又有自己的小秘密.就如同进程在计算中一样的地位,所以也叫"轻量级的进程" 2.使用多线程 为什么要使用多线程呢? 因为现在的处理器为了提高效率,采取并发处理的方式,并发也就是看起来像是同时发生,但是同一时间处理器上只能执行一个进程,只是CPU的处理速度太快,我们看起

java多线程技能

1.进程和线程的定义 进程:受操作系统管理的基本运行单元 线程:进程中独立运行的子任务 2.使用多线程 2.1继承Thread类:自定义线程类并继承Thread类,并且重写run方法. class MyThread extends Thread { private int count=1000; @Override public void run() { // TODO Auto-generated method stub for(int i=0;i<500;i++){ count--; Sys

第1章 Java多线程技能

*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } a { color: #4183C4; } a.absent { color: #cc0000; } a.anchor { display: block; padding-left: 30px; margin-left: -30px; cursor: pointer; position: absolute

(1)Java多线程编程核心——Java多线程技能

1.为什么要使用多线程?多线程的优点? 提高CPU的利用率 2.什么是多线程? 3.Java实现多线程编程的两种方式? a.继承Thread类 public class MyThread01 extends Thread {     @Override     public void run() {         super.run();         System.out.println("MyThread01");     } public static void main(S

Java多线程编程(一)Java多线程技能

一.进程和多线程的概念以及线程的优点 打开Windo任务管理器可以看到很多正在运行着的exe程序,完全可以将运行在内存中的exe文件理解成进程,进程是受操作系统管理的基本运行单元. 线程可以理解成在进程中独立运行的子任务.比如,QQ.exe运行时就有很多的子任务在同时运行. 使用线程,可以最大限度地利用CPU的空闲时间来处理其他的任务,CPU在人物之间不停地切换,由于切换速度非常快,所以人们感觉这些任务似乎在同时运行.也就是说看,可以在同一时间内运行更多不同种类的任务,可以大幅增加CPU的利用率

java多线程系列(三)

等待通知机制 前言:本系列将从零开始讲解java多线程相关的技术,内容参考于<java多线程核心技术>与<java并发编程实战>等相关资料,希望站在巨人的肩膀上,再通过我的理解能让知识更加简单易懂. 目录 认识cpu.核心与线程 java多线程系列(一)之java多线程技能 java多线程系列(二)之对象变量的并发访问 java多线程系列(三)之等待通知机制 java多线程系列(四)之ReentrantLock的使用 非等待通知 public void run() { try {

java多线程系列(一)

java多线程技能 前言:本系列将从零开始讲解java多线程相关的技术,内容参考于<java多线程核心技术>与<java并发编程实战>等相关资料,希望站在巨人的肩膀上,再通过我的理解能让知识更加简单易懂. 目录 认识cpu.核心与线程 java多线程系列(一)之java多线程技能 java多线程系列(二)之对象变量的并发访问 java多线程系列(三)之等待通知机制 java多线程系列(四)之ReentrantLock的使用 并发历史 在没有操作系统的时候,一台计算机只执行一个程序,

java多线程系列(四)

Lock的使用 前言:本系列将从零开始讲解java多线程相关的技术,内容参考于<java多线程核心技术>与<java并发编程实战>等相关资料,希望站在巨人的肩膀上,再通过我的理解能让知识更加简单易懂. 目录 认识cpu.核心与线程 java多线程系列(一)之java多线程技能 java多线程系列(二)之对象变量的并发访问 java多线程系列(三)之等待通知机制 java多线程系列(四)之ReentrantLock的使用 ReentrantLock(重入锁) public class

java多线程系列(二)

对象变量的并发访问 前言:本系列将从零开始讲解java多线程相关的技术,内容参考于<java多线程核心技术>与<java并发编程实战>等相关资料,希望站在巨人的肩膀上,再通过我的理解能让知识更加简单易懂. 目录 认识cpu.核心与线程 java多线程系列(一)之java多线程技能 java多线程系列(二)之对象变量的并发访问 java多线程系列(三)之等待通知机制 java多线程系列(四)之ReentrantLock的使用 线程安全 线程安全就是多线程访问时,采用了加锁机制,当一个