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#多线程之线程池篇中,我们将学习多线程访问共享资源的一些通用的技术,我们将学习到以下知识点: 在线程池中调用委托 在线程池中执行异步操作 线程池和并行度 实现取消选项 使用等待句柄和超时 使用计时 ...
随机推荐
- 【基础笔记】《html&CSS设计与构造网站》一书导读
◉HTML 1.结构网页使用HTML HyperText Markup Language 来描述页面结构超文本标记语言允许对文本建立链接,允许对文本进行标记网页开头都有一个DOCTYPE 文档类型 声 ...
- EBS登陆界面IE显示异常
使用在IE浏览登陆EBS时: 在登陆界面,登录和取消的按钮显示异常: 在进入HOME界面时,显示的职责全为undefined. 原因: 由于IE版本的兼容性. 解决方法: 浏览器 菜单->工具- ...
- Java中long和Long有什么区别(转)
Java的数据类型分两种:1.基本类型:long,int,byte,float,double,char2. 对象类型(类): Long,Integer,Byte,Float,Double,Char,S ...
- Flask入门文件上传flask-uploads(八)
1 视图传递多个参数 (1) 普通传参 : 关键字参数传递 return render_template('模板名称.html',arg1=val1,arg2=val2...) (2) 字典传参 : ...
- 在已有软件加壳保护 下实现 Inline hook
如写的不好请见谅,本人水平有限. 个人简历及水平:. http://www.cnblogs.com/hackdragon/p/3662599.html 正常情况: 接到一个项目实现对屏幕输出内容的获取 ...
- vim编辑下几个退出保存的命令
:w 将数据写入硬盘 :w! 若文件属性为“只读”时,强制写入该文件.不过需要注意,这个是在你的权限可以改变的情况下才能成立 :q 离开vim :q! 修改过文件,又不想保存 :wq 保存后离开 :w ...
- Arcgis Javascript中geometryEngine报错’hq‘of undefined的解决方法
这个问题困扰了我一个星期,原因是使用geomagicbuffer时候,有的线可正常使用,有的就直接报错,一直没有解决,后来发现是api自己的bug导致的 干脆直接读代码,在geometryEngine ...
- Android进阶笔记10:ListView篇之ListView显示多种类型的条目(item)
ListView可以显示多种类型的条目布局,这里写显示两种布局的情况,其他类似. 1. 这是MainActivity,MainActivity的布局就是一个ListView,太简单了这里就不写了,直接 ...
- Android(java)学习笔记33:注册广播接收者
1. 下面我们先看一部分代码,由代码进行进一步的深入: registerReceiver( new BroadcastReceiver() {//onReceive中代码的执行时间不要超过5s,and ...
- ettercap_缺少组件问题
原因:缺少WinPcap组件解决:安装即可