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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 段郎 中级黑马   /  2014-4-18 12:08  /  625 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

毕向东java视频总结----线程

线程的状态
    1、创建
    2、运行
    3、阻塞
    4、冻结:执行了sleep或者wait方法以后,当被唤醒后进入阻塞状态
    5、消亡:run执行完毕或者执行了stop方法
创建线程的两种方式
    第一种是继承Thread类,在run()方法里面写要执行的内容。
    第二种是实现Runnable
        步骤:1、实现Runnable接口,复写run方法;
                 2、创建Thread对象并把Runnable子类对象传给Thread类的构造方法
                 3、运行Thread的start方法,此时执行的run其实是Runnable里面的run方法
两种创建线程的区别:
        1、实现方式避免单继承的局限性
        2、Runnable子类的run方法中的内容独立共享,不会因为thread有多个就会增多(卖票的例子)

线程安全
造成线程不安全的原因:多个线程共享数据时,一个线程只执行了一部分语句,没有执行完,另一个线程就进来执行了,导致共享数据错误
    解决方案:把共享资源设置成临界资源,也就是该资源每次只能被一个线程操作,只有操作完后才能别另一个线程操作。synchronized(对象){需要同步的代码},synchronized有一个标志位,当有一个线程操作synchronized 需要同步的代码时别的线程无法对这部分代码进行操作。
被synchronized(obj)修饰的代码块叫同步代码块,被synchronized修饰的函数叫同步函数
    同步的弊端:消耗资源,每次线程都要判断锁。
    同步的有点:安全

小知识
    1、创建一个线程对象(new DemoThread())就已经创建了一个线程,start()只是启动线程而已。
    2、只要子线程为销毁,父进程就在
    3、直接调用run()方法和start()方法区别大了去了,前者相当于普通对象调用方法,和线程没半毛钱关系了
    4、线程都是有名字的,通过getName()得到,也可以通过setName()设置名称
    5、获取当前运行进程的名称currentThread()
    6、同步函数有所属对象的话,用到的锁就是这个对象




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马