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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 牛德阳 中级黑马   /  2015-12-21 21:39  /  779 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

<a  target="blank">android培训</a>、<a  target="blank">java培训</a>、期待与您交流!创建线程的第一种方式: 继承 Thread , 由子类复写 run 方法。
步骤:
1, 定义类继承 Thread 类;
2, 目 的是复写 run 方法, 将要让线程运行的代码都存储到 run 方法中;
3, 通过创建 Thread 类的子类对象, 创建线程对象;
4, 调用线程的 start 方法, 开启 线程, 并执行 run 方法。




线程状态:
被创建: start()
运行: 具备执行资格, 同时具备执行权;
冻结: sleep(time) , wait() —notify() 唤醒; 线程释放了 执行权, 同时释放执行资格;
临时阻塞状态: 线程具备 cpu 的执行资格, 没有 cpu 的执行权;
消亡: stop()
创建线程的第二种方式: 实现一个接口 Runnable。
步骤:
1, 定义类实现 Runnable 接口 。
2, 覆盖接口 中的 run 方法( 用于封装线程要运行的代码)。
3, 通过 Thread 类创建线程对象;
4, 将实现了 Runnable 接口 的子类对象作为实际参数传递给 Thread 类中的构造函数。
为什么要传递呢? 因为要让线程对象明确要运行的 run 方法所属的对象。*/




/*多线程安全问题:
在执行中发现可能打印0,-1,-2等错票
原因:多条语句操作同一个线程共享数据时,一个线程还没执行完,另一个线程进来执行,导致共享数据错误
解决方法:多条语句操作同一个线程共享数据时,一个线程执行完所有语句,另一个线程再执行
java提供了较为专业的解决方法同步代码块
synchronized(对象)

   需要同步的代码块

对象如同锁,持有锁的线程才可以在同步中执行

同步的前提:
1必须有两个以上线程
2多个线程持使用同一个锁

同步函数用的是哪一个锁呢
函数需要被对象调用,所有函数都有一个所属对象引用,就是this
this就是同步函数的锁。
仍然以电影票为例子
创建两个线程买票,一个在同步代码块中,一个在同步函数中
采用Object:




采用this修正后:



注意:同步函数被静态修饰后,锁不是this,锁为本类对应的字节码文字对象即  类名.class
*/


2 个回复

倒序浏览
自学么- -
好厉害啊,我自己也想自学,可是自己老想看电影,玩游戏,,好无力啊
不管怎么说,赞一个
虽然我看不懂- -...
回复 使用道具 举报
感觉复制的吧,失去了阅读的意义
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马