A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ln0491 中级黑马   /  2015-9-16 09:22  /  1322 人查看  /  23 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

昨天看了视频,自己写了下,就不是出来

23 个回复

正序浏览
谢谢各位。。
回复 使用道具 举报
ln0491 发表于 2015-9-17 11:44
两个锁为什么要静态的,普通的为什么不行

定义成静态只是为了方便使用,可以直接用类名调用。
回复 使用道具 举报
慢慢来 ,理解
回复 使用道具 举报
...........
回复 使用道具 举报
线程、、、、、、、、重点!学习二楼,谢谢
回复 使用道具 举报

我也是看了很久才明白的{:2_32:}
回复 使用道具 举报
jiaweizhang 发表于 2015-9-17 12:10
静态: 随着类的加载而加载---会随着类的消失而消失,生命周期最长
如果不是静态,你在代码中加入锁对象. ...

明白了,谢谢
回复 使用道具 举报
ln0491 发表于 2015-9-17 11:44
两个锁为什么要静态的,普通的为什么不行

静态: 随着类的加载而加载---会随着类的消失而消失,生命周期最长
如果不是静态,你在代码中加入锁对象.toString(); 打印结果会是4个不同的地址
也就说相当于4把锁,当然锁不住,所有静态是保证锁对象只有两个
java.lang.Object@41bbee70
java.lang.Object@5b87a0b5
java.lang.Object@4f7c1837
java.lang.Object@554055b5

评分

参与人数 1黑马币 +10 收起 理由
ln0491 + 10 很给力!

查看全部评分

回复 使用道具 举报
史世锋 发表于 2015-9-16 22:21
package com.itheima;

class MyLock

两个锁为什么要静态的,普通的为什么不行
回复 使用道具 举报
两个锁为什么要静态的,普通的为什么不行
回复 使用道具 举报
jiaweizhang 发表于 2015-9-16 10:51
这时我学习总结的,写出了一个例子

死锁出现的情况:同步嵌套同步

两个锁为什么要静态的,普通的为什么不行
回复 使用道具 举报
package com.itheima;

class MyLock
{
        //定义两个Lock对象,代表两把锁
        static MyLock  locka = new MyLock ();
        static MyLock  lockb = new MyLock ();
}
class DeadLock implements Runnable
{       
        //定义一个标识符
        boolean flag;
        DeadLock(boolean flag)
        {
                this.flag = flag;
        }
       
        @Override
        public void run()
        {
                if(flag)
                {
                        synchronized(MyLock.locka)
                        {
                                System.out.println("if locka");
                                //lockb被另一个线程持有
                                synchronized(MyLock.lockb)
                                {
                                        System.out.println("if lockb");
                                }
                        }
                }
                else
                {
                        synchronized(MyLock.lockb)
                        {
                                System.out.println("else lockb");
                                //locka被另一个线程持有
                                synchronized(MyLock.locka)
                                {
                                        System.out.println("else locka");
                                }
                        }
                }
        }
}
public class Test026
{

        /**
         * 死锁的出现时因为同步代码块中嵌套同步代码块
         * @param args
         */
        public static void main(String[] args)
        {
                DeadLock dl1 = new DeadLock(true);
                DeadLock dl2 = new DeadLock(false);       
               
                new Thread(dl1).start();
                new Thread(dl2).start();       
        }

}
回复 使用道具 举报
锁内容比较重要,挺简单的,好好学
回复 使用道具 举报
据我的 认识 死锁是随机出现的吧。  有时候会出现和谐的情况 就没问题 不知道楼主是不是遇到这种情况,还是我的技术太差 有误导你的成分在??
回复 使用道具 举报
嗯,学习了
回复 使用道具 举报
死锁好像挺绕的,要先认真预习下
回复 使用道具 举报
好高深,没看懂
回复 使用道具 举报
插兜 中级黑马 2015-9-16 13:01:35
7#
二楼很棒
回复 使用道具 举报
我们也快要学线程了
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马