通过在Thread的子类覆盖run()这个方法然后调用Thread的无参数构造函数(Thread t =new Thread())可以创建新的线程。
一旦Thread对象的run()方法完成之后,该Thread就不能在重新启动(即Thread.start()).
还有一点最重要的就是使用实现Runnable接口的方式创建的线程可以处理同一资源,从而实现资源的共享.
很容易误解锁是配在用synchronizedb标记的方法上,但事实上锁不是配在方法上的,而是配在对象上。
每个JAVA对象都有一个锁,每个锁只有一个钥匙。
如果对象有两个同步化的方法,就表示两个线程无法进入同一个方法,也表示两个线程无法进入不同的方法。
什么时候要同步化。
同步化的意义是指定某段工作要在不能分割的状态下执行
为程序段加上同步化的一些方法:1
1.直接在方法上声明public synchronized void fun(){程序段}
2.用synchronized块:
锁在类上(类级别的锁):
synchronized(A.class){
程序段
}
锁在对象上(对象级别的锁):
synchronized(new Object()或者this){
程序段
}
要让对象在线程上有足够的安全性,就要判断出那些指令不能被分割执行。
可见/访问性 | 在同一类中 | 同一包中 | 不同包中 | 同一包子类中 | 不同包子类中 |
public | yes | yes | yes | yes | yes |
protected | yes | yes | no | yes | yes |
package | yes | yes | no | yes | no |
private | yes | no | no | no | no |
可见/访问性 | 在同一类中 | 同一包中 | 不同包中 | 同一包子类中 | 不同包子类中 |
public | yes | yes | yes | yes | yes |
protected | yes | yes | no | yes | yes |
package | yes | yes | no | yes | no |
private | yes | no | no | no | no |