缘由
我们为什么要用锁
为了自己锁住固定的东西别人有打不开这把锁。有点绕是么?举个栗子
提问:如何对女朋友足够
狠,
狠,
狠
回答:在她的保险柜外面再加一个保险柜。
ok你得不到的她也不要想得到
这样你就可以重新获得一个女朋友
像理解锁 就先给你女朋友的保险柜上个锁吧。话不多说代码搞一搞:
public class TranThread extends Thread {
/*继承Thread实现多线程*/
private static int piao=100;
public TranThread(String name) {
super(name);
}
@Override
public void run() {
// TODO Auto-generated method stub
while(piao>=0) {
System.out.println(getName()+"剩余"+piao+"张票");
piao--;
}
}
}
下面我们用实现Rnnable
接口去加锁
public class TranThread implements Runnable {
private static int piao=100;
//锁,所不可以放在while内表示所只有一个
private Object lock=new Object();
//在锁中我们可以使用this代替
@Override
public void run() {
while(piao>0) {
/*锁对象放入synchronized*/
synchronized (lock) {
System.out.println(Thread.currentThread().getName()+"剩余"+piao+"张票");
piao--;
}
}
}
}
锁就是你去卫生间格栅上的锁,可以不让别人打扰你在小隔间里做点啥。能做啥 3- ?
这句话不是我说的,但是确实恶心到深刻的理解锁的概念。
所以我们解析锁的特点,
锁是对象:对象?哦吼吼吼吼!等一下我擦擦鼻血
使用时的唯一性 :只有一把,只有使用者才能打开和上锁。相当于嫁人的新娘子,眼馋也没用。
空闲时的公共性:没人用的时候谁都能开。哦吼吼吼吼,这个锁还挺浪。
如果你还不懂,和尚建议你找个程序员的荤段子看一看。 不懂,接着看呗。!
所以,我们一定要避免每一次new
新对象的时候产生一个锁。那么我们就要理解,我们是用类去继承Thread类,或者去实现Runnable接口。我们在调用的是时候必然会new
类一个对象,这里我们就要明白,new对象的机制,这个大家自行看源码或者面向百度编程。
给大家简单说一哈
java是面向对象,啥是个对象?
面向对象=抽象、封装、继承、堕胎多态。
面向对象好变态,又抽又打又堕胎
我们new类对象的时候,会同时构造类里面的变量属于这个类对象
所以你每一次new一次对象,对象就又一个锁。那完蛋了,和我们的想法不符啊。
- 一:使用 private将锁变成一个乖乖的宝贝啊。谁都抢不走的那种。
- 二:避免将new锁的语句放在run方法内(特别是while内部)。
- 三:锁是你对象,你不得好好对待,上交你的零花钱、工资卡、编程时间去陪着锁啊。
不用这么麻烦,前辈已经给我想好解决办法了,那就是——
看文档
看文档
看文档
看文档
看文档
看文档
人家都有解决方法了你还看我写的这东西,你怕是脑壳有gai。