文章标题
来源:互联网 发布:数据库系统概论第五版 编辑:程序博客网 时间:2024/06/05 03:39
一 线程学习补充以及线程池
1线程的三种阻塞状态:1 运行的线程调用wait 释放锁
2 运行的线程调用sleep/join 或者io 不释放锁
3 运行的线程等待同步锁
2join方法详解
在很多情况下,主线程生成并起动了子线程,如果子线程里要进行大量的耗时的运算,主线程往往将于子线程之前结束,
但是如果主线程需要用到子线程的处理结果,也就是主线程需要等待子线程执行完成之后再结束,这个时候就要用到join()方法了。
join 即使调用线程阻塞直到使用join的线程结束后再进行下一步;
3yield 方法详解
yield是使当前正在运行的程序回到就绪状态,就绪的所有线程重新竞争cpu,所以当前线程有可能再次获得时间片
sleep是转到阻塞状态,这样低优先级的线程也有可能获得cpu
4syncronized关键字详解
该关键字加于类或者对象上时,锁定的均为对象,即同一个对象才会互斥,否则不会。
1同步方法 在方法修饰符加上该字 2同步代码块 0长度的byte数组比任何对象都要节省开销,可以作如下处理来同步代码块 private byte[] lock = new byte[0]; // 特殊的instance变量 Public void methodA() { synchronized(lock) { //… } } 3同步static 块 static块是对类的class对象来加锁
二总结
①线程同步的目的是保护在多个线程访问同一个资源时对资源的破坏
②线程同步通过加锁来实现,每个对象有且仅有一个锁,线程一旦获取了锁,其他线程就无法再访问该对象的其他非同步方法
③对于静态方法,锁是对于这个类的Class对象的,静态锁和非静态锁互不干扰,可以同时获取两个锁
④对于同步,要随时清醒在使用哪个锁,这是关键
⑤编写线程安全的类,要随时确保对多个线程竞争资源的逻辑和安全作出正确的判断,对原子操作作出分析 ,并保证原子操作期间别的进程无法竞争资源
三 线程间数据通信
1通过构造方法传递
将实现了runnable的类的构造方法改造,传值
2通过变量和方法传递数据
调用线程类中的方法,设置相应的值
3通过函数回调来实现
四 java基础学习补充(洛昊)
1栈,堆,方法区
Stirng str = new String(“123”);
str 放在栈
new的String对象放在堆中
“123” 放在常量池(属于方法区)
2math.round
round过程是+0.5 然后取整
3final关键字作用
①修饰类:类不能被继承
②修饰方法:方法不能被重写
③修饰变量:变量只能赋值一次
4treemap和treeset排序时如何比较元素
要求实现Compareble接口,该接口定义了compareTo方法
五 java序列化和反序列化
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 哈夫曼编码(Huffman Coding) cpp完整代码实现 详细注释 ASCII码表
- iOS UIButton选中状态下点击高亮
- 快速排序三种
- Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were
- linux的历史
- 文章标题
- 【Java】 之 Date、Calendar
- CMake入门笔记
- 如何在ASP.NET的web.config配置文件中添加MIME类型
- DAY10 NFS 计划任务 shell
- Golang 在 Mac、Linux、Windows 下如何交叉编译 --- 作者:磐石区
- 06-图1 列出连通集 (25分)
- keepalived的安装和配置nginx的高可用
- webgis