文章标题

来源:互联网 发布:数据库系统概论第五版 编辑:程序博客网 时间: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序列化和反序列化