JAVAOOP多线程
进程每个独立运行的任务对应一个进程,每个进程可以产生多个线程
特点:1,进程是系统运行程序的基本单位
2,每一个进程都有自己独立的一块内存空间,一组系统资源
3,每一个进程的内部数据和状态都是完全独立的
系统中可以有多个进程,包括系统进程和用户进程
线程:线程是进程中执行运算的最小单位,可完成一个独立的顺序控制流程。每个进程中至少有一个线程,被称为主线程,来作为程序运行的入口点。
一个进程中有多个线程,用来完成不同的工作称为“多线程”。每个任务是一个线程,多个线程共享相同的地址空间并且共同分享同一个进程。
好处:充分利用CPU资源;简化编程模型;带来良好的用户体验
Thread
Java通过Thread类讲线程所必须的功能都封装了起来。
java.lang.Thread类支持多线程编程
Thread类常用方法
构造方法 |
说明 |
Thread() |
分配新的Thread对象 |
Thread(Runnable target) |
分配新的Thread对象,target为run()方法被调用的对象 |
Thread(Runnable target,String name) |
分配新的Thread对象,target为run()方法被调用的对象,name为新线程的名称 |
void run() |
执行任务操作的方法 |
void start() |
使该线程开始执行,Java虚拟机调用该线程的run()方法 |
void sleep(long millis) |
在指定的毫秒数内让当前正在执行的线程休眠(暂停执行) |
String getName() |
返回线程的名称 |
int getPriority() |
返回线程的优先级 |
void setPriority(int newPriority) |
更改线程的优先级 |
static Thread currentThread() |
返回当前正在执行的线程对象的引用 |
boolean isAlive() |
测试线程是否处于活动状态 |
void join() |
等待该线程终止,等待该线程完成后才执行其他线程 |
void interrupt() |
中断线程 |
void yield() |
暂停当前正在执行的线程对象,并执行其他线程 |
MAX PRIORITY线程具有最高优先级
MIX PRIORITY线程具有最低优先级
NORM PRIORITY分配给线程的默认优先级
主线程
main()方法即为主线程入口
产生其他线程的线程
必须最后完成执行,因为它执行各种关闭动作
使用线程步骤:1,定义一个线程,同时指明这个线程所要执行的代码
2,创建线程对象
3,启动线程
4,终止线程
创建线程的两种方法:继承Thread类或实现Runnable接口
继承Thread类创建线程
创建线程:定义MyThread类继承并重写Thread类的run()方法,编写线程执行体,创建线程对象,调用start()方法启动线程,run()方法调用实例
自定义线程默认名称为:Thread-序号(为从0开始的整数)
start():线程的
run():普通方法,称为线程体
CPU分配时间片的时候,run()开始执行
线程的五种状态:创建、就绪run()、阻塞(sleep()、yield()、wait()、join())、运行、死亡(异常死亡、正常死亡)
sleep:线程调用此方法的时候,占用cpu资源不释放,其他线程无法获取cpu资源,必须等待
wait(Object中的方法):线程调用的时候会释放cpu资源,其他线程无需等待,如果调用此方法,就必须使用notify()唤醒。
yield礼让:是概率问题
简答一:单CPU的机器如何同时执行一个线程
单CPU机器同时只能执行一条指令,不可能同时执行多个任务。只是将时间分成多个时间片,分配给不同的路线。只是表面上看上去是多个线程同步执行,其实是因为不同线程之间的时间非常短。看起来是多个线程同时执行。
简答二:关于start()与run()
线程实例调用start()方法和调用run()方法有着天壤之别,run是调用实例方法,只有主线程执行,只有一条执行路径,start才是真正的启动线程。
简答三:线程常见的5种状态:1,创建:创建线程对象后已经取得了相应的资源,却没有处于运行状态,可以通过Thread类的方法来设置线程对象的状态。
2,就绪:通过start()方法启动线程,就会进入就绪状态。进入线程队列排队,等待CPU资源。
3,运行:就绪状态的线程获得CPU资源时,即可转入运行状态,执行run()方法。
4,阻塞:正在运行的程序因某种原因不能继承运行时,进入阻塞状态。是一种不可运行的状态。可能出现的原因:线程优先级比较低,因此不能获得CPU资源;使用sleep()方法使线程休眠;通过调用wait()方法使线程等待;通过调用yield()方法,线程显示出让CPU控制权;
线程由于等待一个文件I/O事件被阻塞
5,死亡:线程的run()方法运行完毕,就会进入死亡状态。不具有继承运行的能力。
JAVAOOP多线程的更多相关文章
- Python中的多进程与多线程(一)
一.背景 最近在Azkaban的测试工作中,需要在测试环境下模拟线上的调度场景进行稳定性测试.故而重操python旧业,通过python编写脚本来构造类似线上的调度场景.在脚本编写过程中,碰到这样一个 ...
- 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例
前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...
- 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)
前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...
- Java多线程
一:进程与线程 概述:几乎任何的操作系统都支持运行多个任务,通常一个任务就是一个程序,而一个程序就是一个进程.当一个进程运行时,内部可能包括多个顺序执行流,每个顺序执行流就是一个线程. 进程:进程 ...
- .NET基础拾遗(5)多线程开发基础
Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...
- Java多线程基础——对象及变量并发访问
在开发多线程程序时,如果每个多线程处理的事情都不一样,每个线程都互不相关,这样开发的过程就非常轻松.但是很多时候,多线程程序是需要同时访问同一个对象,或者变量的.这样,一个对象同时被多个线程访问,会出 ...
- C#多线程之线程池篇3
在上一篇C#多线程之线程池篇2中,我们主要学习了线程池和并行度以及如何实现取消选项的相关知识.在这一篇中,我们主要学习如何使用等待句柄和超时.使用计时器和使用BackgroundWorker组件的相关 ...
- C#多线程之线程池篇2
在上一篇C#多线程之线程池篇1中,我们主要学习了如何在线程池中调用委托以及如何在线程池中执行异步操作,在这篇中,我们将学习线程池和并行度.实现取消选项的相关知识. 三.线程池和并行度 在这一小节中,我 ...
- C#多线程之线程池篇1
在C#多线程之线程池篇中,我们将学习多线程访问共享资源的一些通用的技术,我们将学习到以下知识点: 在线程池中调用委托 在线程池中执行异步操作 线程池和并行度 实现取消选项 使用等待句柄和超时 使用计时 ...
随机推荐
- CSS文字有关属性
font-size|family|weight|style 大小字体加粗斜体 color|opacity 颜色透明度 height+line-height:垂直居中 overflow:hidden|v ...
- Web前端面试指导(八):iframe有那些缺点
本题的特点 这道题目的特点就是不按照正常的套路来提问,一般都是问优点,这里比较反常问iframe的缺点,很多同学肯定很不习惯这种问答,因为平时只关注有点,这么一问就懵逼了! 本题解答的思路及要点 ① ...
- Revolution of Unix
- CAA介绍(转)
CAA是DS公司正对于其一系列产品,eg:CATIA,ENOVIA,DELIMA,etc,进行二次开发的一个环境.与VC结合的比较紧密.CAAV4是用于Unix/Linux的,到CAAV5才移植到Wi ...
- Azure进阶攻略丨共享访问签名是个什么东东?
Azure 进阶攻略]一经推出便受到了广大粉丝的热情追捧,大家纷纷表示涨了姿势,并希望能了解更多的攻略~根据大家的投票结果,本期,小编将为大家讲解“如何生成 Shared Access Signatu ...
- 架构蓝图--软件架构 "4+1" 视图模型
引言 我们已经看到在许多文章和书籍中,作者欲使用单张视图来捕捉所有的系统架构要点.通过仔细地观察这 些图例中的方框和箭头,不难发现作者努力地在单一视图中表达超过其表达限度的蓝图.方框是代表运行的程序吗 ...
- WAKE-WIN10-SOFT-MATio
1,matio Matio is an open-source C library for reading and writing binary MATLAB MAT files. This libr ...
- adb工具包使用方法
ADB工具包总共有四个文件,两个exe后缀,两个dll后缀.里面还带有fastboot.exe下载后在PC上安装,如安装到D:\adb_tools-2.0目录,确认目录中带有fastboot.exe文 ...
- 深度剖析hdfs原理
大数据底层技术的三大基石起源于Google在2006年之前的三篇论文GFS.Map-Reduce. Bigtable,其中GFS.Map-Reduce技术直接支持了Apache Hadoop项目的诞生 ...
- 源码安装mysql5.6.37
MYSQL 源码安装: 修改参数文件:vi /etc/security/limits.confmysql soft nproc 2047mysql hard nproc 16384mysql soft ...