Java笔记(day13)
多线程:
进程:正在进行中的程序(直译)
线程:执行路径,就是进程中负责程序执行的控制单元(执行路径);
一个进程中可以多个路径,称为多线程
一个进程至少一个线程
每一个线程都有自己运行的内容,这个内容称为线程要执行的任务
多线程好处:解决了多部分同时运行的问题
弊端:效率降低
应用程序的执行是CPU在做着快速的切换完成的,切换是随机的
jvm启动时就启动了多个线程,至少两个线程
1、执行main函数的线程
该线程的代码都定义在main函数中
2、负责垃圾回收的线程
finalize清除垃圾,重新分配资源
System.gc()启动垃圾回收器
主线程运行示例:
class Demo extends Thread
{
private String name;
Demo (String name)
{
this.name=name;
}
public void run()
{
for(int x=0;x<10;x++)
{
for(int y=-99999;y<999999999;y++){}
System.out.println(name+“....x”+x);
}
}
}
class Threaddemo
{
Demo d1=new Demo(“旺财”);
Demo d2=new Demo(“xiaoqiang”);
d1.start();
d2.start(); //开启线程,运行run方法
}
创建线程:
1、继承Thread类
步骤:
1、定义一个类继承Thread 类;
2、覆盖Thread 中的run方法;
3、直接创建Thread的子类对象;
4、调用start启动线程;
创建线程的目的是为了开启一条执行路径,取运行指定代码和其他代码同时运行
而运行的指定代码就是这个执行路径的任务
JVM创建的主线程的任务都定义在主函数中
而自定义的线程任务在哪
Thread类用于描述线程,线程是需要任务的,所以Thread类也对任务的描述
这个任务通过Thread类中的run方法来体现,run方法中定义就是线程要运行的任务代码
开启线程是为了运行指定代码,所以继承Thread,复写run方法
调用start和run的区别
getName()返回该线程的名字,
currentThread()正在运行的线程名字
Cpu的执行资格:可以被CPU处理,在处理队列中排队
Cpu的执行权:正在被cpu处理
临时阻塞状态:具备执行资格,等待执行权
被创建 start() 运行 sleep(time) wait() 冻结
Sleep(time)时间到 notify()
Run方法结束,线程的任务结束
Stop()
消亡
2、创建线程的第二种方式:implements runnable接口
1、定义类实现runnable接口
2、覆盖接口中run方法
3、通过thread类创建线程对象,并将runnable接口中子类对象作为thread类参数传递
4、使用start开启线程
实现runnable接口的好处:
1、将线程的任务从线程的子类中分离出来,进行了单独的封装
线程安全问题解决思路:将多条操作共享数据的线程代码封装起来,当有线程执行代码时,其他不能参与运算;
同步代码块 :synchronized(对象)
{
需要被同步的代码;
}
同步的好处:解决了线程的安全问题;
同步的弊端:相对降低了效率,因为同步外的线程都会判断同步锁
多线程的单例:
单例设计模式:
延迟加载设计模式:
线程间通信(多个线程在处理同一资源,但是任务却不同):
1、这些方法存在于同步中;
2、使用这些方法时必须要标识所属的同步的锁;
等待、唤醒机制:
涉及的方法:1、wait():让线程处于冻结状态,被wait的线程会被存储线程池
2、notify() 唤醒线程池中任意一个线程
3、notifyAll() 唤醒线程池中所有线程
这些方法都必须定义在同步中,因为这些方法是用于操作线程状态的方法
必须要明确到底操作的是哪个锁上的线程
为什么这些方法定义在object类中
因为这些方法是监视器的方法,监视器本身就是一个锁
Wait和sleep的方法:
1、wait可以指定时间也可以不指定
Sleep必须指定时间
2、在同步中,对CPU的执行权和锁的处理不同
Wait:释放执行权,释放锁
Sleep:释放执行权,不释放锁
停止线程:
1、stop方法(已过时)
2、Run方法结束
任务中都有循环,通过控制循环结束
Interrupt()将线程从冻结状态恢复到运行状态,让线程具备CPU的执行资格
守护线程setDaemon(true)将该线程标记为守护线程,当所有线程被守护时,CPU退出
t1.join()方法:线程要申请加入进来,运行,在t1线程终止之后。临时加入一个线程运算时可以使用该方法
Java笔记(day13)的更多相关文章
- Effective Java笔记一 创建和销毁对象
Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 ...
- java笔记00-目录
--2013年7月26日17:49:59 学习java已久,趁最近有空,写一个总结: java笔记01-反射:
- java笔记整理
Java 笔记整理 包含内容 Unix Java 基础, 数据库(Oracle jdbc Hibernate pl/sql), web, JSP, Struts, Ajax Spring, E ...
- 转 Java笔记:Java内存模型
Java笔记:Java内存模型 2014.04.09 | Comments 1. 基本概念 <深入理解Java内存模型>详细讲解了java的内存模型,这里对其中的一些基本概念做个简单的笔记 ...
- servlet(6) - servlet总结 - 小易Java笔记
垂阅前必看: 这都是我总结的我觉得是学习servlet应该掌握的,我在学习期间也做了一个博客项目来让所学的知识得以巩固.下面就是博客项目链接.前面的servlet相关的笔记总汇,还有就是我把觉得在学习 ...
- Java笔记 —— 继承
Java笔记 -- 继承 h2{ color: #4ABCDE; } a{ text-decoration: none!important; } a:hover{ color: red !import ...
- Java笔记 —— 方法重载和方法重写
Java笔记 -- 方法重载和方法重写 h2{ color: #4ABCDE; } a{ text-decoration: none !important; } a:hover{ color: red ...
- Java笔记 —— 初始化
Java笔记 -- 初始化 h2{ color: #4ABCDE; } a{ text-decoration: none !important; } a:hover{ color: red !impo ...
- Java笔记 —— this 关键字
Java笔记 -- this 关键字 h2{ color: #4ABCDE; } a{ color: blue; text-decoration: none; } a:hover{ color: re ...
- Java 笔记 —— java 和 javac
Java 笔记 -- java 和 javac h2{ color: #4ABCDE; } a{ text-decoration: none !important; } a:hover{ color: ...
随机推荐
- scala_spark实践3
Spark 读写HBase优化 读数据 可以采用RDD的方式读取HBase数据: val conf = HBaseConfiguration.create() conf.set(TableInputF ...
- 003-scanf函数使用和表达式-C语言笔记
003-scanf函数使用和表达式-C语言笔记 学习目标 1.[掌握]输入函数scanf的基本使用方法 2.[掌握]输入函数scanf运行原理和缓冲区理解 3.[掌握]算术运算符和算术表达式的使用 4 ...
- go开发包下载,IDE工具下载,基础配置命令
目录 go语言介绍 go开发包下载 命令介绍 配置 修改配置 golandIDE工具下载 编译并执行命令 命令 go语言介绍 # 1 诞生于 2009年,10年的时间,非常新的语言,天然支持并发,很新 ...
- Pie 杭电1969 二分
My birthday is coming up and traditionally I'm serving pie. Not just one pie, no, I have a number N ...
- H - Tempter of the Bone DFS
小明做了一个很久很久的梦,醒来后他竟发现自己和朋友在一个摇摇欲坠的大棋盘上,他们必须得想尽一切办法逃离这里.经过长时间的打探,小明发现,自己所在的棋盘格子上有个机关,上面写着“你只有一次机会,出发后t ...
- python3+selenium3自动化1——元素定位
1.selenium的webdriver提供了八种基本的元素定位方法 打开浏览器 driver = webdriver.Chrome() driver.get('https://www.baidu.c ...
- C#开发BIMFACE系列33 服务端API之模型对比4:获取模型对比结果
系列目录 [已更新最新开发文章,点击查看详细] 模型对比可以对两个文件/模型进行差异性分析,确定两个文件/模型之间构件的几何和属性差异,包括增加的构件.删除的构件和修改的构件. 模型对应可以用 ...
- 【山外笔记-SVN命令】svnlook命令详解
本文打印版问文件下载地址 [山外笔记-SVN命令]svnlook命令详解-打印版.pdf 一.命令简介 svnlook是检验Subversion版本库不同方面的命令行工具,不会对版本库有任何修改,只是 ...
- NER命名实体识别,实体级level的评估,精确率、召回率和F1值
pre = "0 0 B_SONG I_SONG I_SONG 0 B_SONG I_SONG I_SONG 0 0 B_SINGER I_SINGER I_SINGER 0 O O O B ...
- 详细的JavaScript知识梳理和经典的一百个例题,让你掌握JavaScript
这里先做一下JavaScript知识点的梳理,具体的可领取资料 JavaScript语法: js语法.png DOM操作: DOM操作.png 数据类型 面向对象 继承 闭包 插件 作用域 跨域 原型 ...