suspend()可以暂停线程和resume()恢复线程执行 但是被废弃了
suspend和resume方法很容易导致锁的独占、不同步
yield()方法作用是放弃当前CPU资源 让给其他线程去执行(当然也可能刚刚放弃时间片就又获取到了)
Java中线程优先级分为1-10这1-个等级 小于1大于10都会抛出IllegalArgumentException
线程的优先级具有继承特性 A启动B则B和A一样的 可以通过setPriority(int)和getPriority()设置和获取优先级 幽默
高优先级的线程大部分先执行完 但是不代表高优先级的线程全部先执行完。
也就是线程的优先级具有随机性
守护线程
Java线程中有两种线程,用户线程和守护线程
当进程没有非守护线程,守护线程就自动销毁,比如GC setDaemon()设置守护线程
Java中的锁都是可重入锁
?????? 可重入锁的概念:自己可以再次获取自己的内部锁。当一条线程已经获取了某个对象锁却还没有释放,需要获取这个锁的时候可以直接获取 。这种情况不是可重入的话就会造成死锁。
出现异常 锁自动释放 同步不具有继承性 子类方法需要手动添加synchronized关键字
volatile和synchronized的区别:
1、volatile是线程同步的轻量级实现 性能比synchronized要好 volatile只能修饰变量,synchronized可以修饰方法和代码块 synchronized随着jdk版本越来越高 效率也会提高很多
2、多线程访问volatile不会阻塞?? synchronized会
3、volatile保证可见性 不保证原子性 synchronized保证原子性 也可以间接保证可见性 同步私有内存和公共内存中的数据
4、一句话volatile解决多个线程的可见性 synchronized关键字解决多个线程的同步性
5、volatile可以禁止重排序 synchronized不能
PipedReader PipedWriter
PipedReader(PipedWriter src,int pipeSize)//使用buf大小和传入的pw构造pr
void connect(PipedWriter src)//reader的方法,绑定writer
void write(char cbuf[],int off,int len)//写多个字符到Reader缓冲区
SimpleDateFormat非线程安全
父类委派机制的优点:
1、避免类的重复加载,当父类加载了该类的时候,就没必要各个子ClassLoader再加载一次
2、从安全角度考虑 如果不适用这种委托模式 用户就可以编写新的类代替Java核心API中的类,存在很大的安全隐患。分布式计算原理
?????? 如果使用双亲加载机制就会使得Java核心API已经被加载了,而无法再使用自定义的ClassLoader加载核心API
ClassLoader重要方法:
1、Class loadClass(String name, boolean resolve);//name是全限定名 第二个参数表示是否需要解析类
?????? 在准备执行类之前,应该考虑类解析。并不总需要解析,如果JVM只需要知道该类是否存在或者找出该超类 就不需要解析
2、defineClass方法
?????? defineClass方法接受由原始字节组成的数组 转化为Class对象。实现了许多复杂层面--字节码分析成运行时数据结构、校验有效性
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-87102-3.html
再多的叙利亚人也容得下
烊烊最后那一笑好迷人啊
谋求战略均衡点
好可怕