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#多线程之线程池篇中,我们将学习多线程访问共享资源的一些通用的技术,我们将学习到以下知识点: 在线程池中调用委托 在线程池中执行异步操作 线程池和并行度 实现取消选项 使用等待句柄和超时 使用计时 ...
随机推荐
- File I/O 小结
1 .I/0: input/output 2.java.io.File 3 .表示:文件或者文件夹(目录) 4. File f = new File("文件路径"); 5 .注意: ...
- 沙箱模式的chrome浏览器的运行
getUserMedia在chrome 47后已经不可以从非安全源访问(Insecure Origins),但测试搭建apprtc时服务器一般没有添加HTTPS安全验证,chrome就没有权限访问麦克 ...
- css一个很好用的hover显示
之前一直想在样式实现,hover时显示其他div,今天终于找到了,(*^▽^*) .a悬停时显示.b .a:hover .b { display: block; }
- 注入类型(Injection Type)
a) setter(重要) <property name="userDAO"> <ref bean="u"/> </propert ...
- 点触科技安全验证新模式与逐浪CMS3.9.3新功能预览
是颠覆传统字符验证码的新一代验证码系统.用户通过点击.拖动等有趣方式即可完成验证,防止机器攻击, 应用在注册.登录.数据访问保护.黄牛刷单等场景. 只要在逐浪CMS后台-系统-配置 ,进行简单的配置, ...
- 深度剖析hdfs原理
大数据底层技术的三大基石起源于Google在2006年之前的三篇论文GFS.Map-Reduce. Bigtable,其中GFS.Map-Reduce技术直接支持了Apache Hadoop项目的诞生 ...
- [EffectiveC++]item30:Understand the ins and outs of inlining
- SQLServer用存储过程实现插入更新数据
实现 1)有同样的数据,直接返回(返回值:0): 2)有主键同样,可是数据不同的数据,进行更新处理(返回值:2): 3)没有数据,进行插入数据处理(返回值:1). [创建存储过程] Create pr ...
- Linux云主机 监控方案浅析
1.为何需要监控 监控是运维工程师的眼睛,它可帮助运维工程师第一时间发现系统的问题. 对于服务器的整个生命周期,都要和监控打交道: 当有服务器上架,都需要加入比如CPU负载.内存.网络.磁盘等基础监控 ...
- 学习Apache的mod rewrite、access写法
Apache的mod_rewrite是提供了强大URL操作的杀手级的模块,可以实现几乎所有你梦想的URL操作类型,其代价是你必须接受其复杂性,因为mod_rewrite的主要障碍就是初学者不容易理解和 ...