博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一.多线程技能
阅读量:4670 次
发布时间:2019-06-09

本文共 1689 字,大约阅读时间需要 5 分钟。

 

 

 

 

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-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()方法的作用是去的线程的唯一标识。   

 

 

转载于:https://www.cnblogs.com/duan2/p/7602378.html

你可能感兴趣的文章
默认情况下安装的应用程序C盘后提示权限不足,当你开始介意。。。
查看>>
su root 后还是不能使用useradd ,useradd 等命令
查看>>
URL.createObjectURL图片预览
查看>>
js 中exec、test、match、search、replace、split用法
查看>>
Android开发笔记(一)手势识别
查看>>
mybatis 复习笔记03
查看>>
zoj 3703(背包)
查看>>
一种新的子波域滤波算法
查看>>
cookie之三天免登录代码
查看>>
1043 幸运号码 数位DP
查看>>
js18
查看>>
2018-2019-2 20175308实验一 《Java开发环境的熟悉》实验报告
查看>>
如何设置WIN7自动登录(去除登录密码)
查看>>
关于bash中if语法结构的广泛误解(转)
查看>>
10G整数文件中寻找中位数或者第K大数
查看>>
操作手机数据库的uri
查看>>
Python小应用1 - 抓取网页中的链接地址
查看>>
HTML表格和列表笔记&练习<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>关于表格的一些练...
查看>>
Hadoop HBase概念学习系列之hbase shell中执行java方法(高手必备)(二十五)
查看>>
数据类型
查看>>