黑马程序员_多线程

------- android培训java培训、期待与您交流! ---------- 

 

多线程

 

创建线程方式一


继承Thread类
1.子类覆盖父类中的run方法,将线程运行的代码存放在run中。


2.建立子类对象的同时线程也被创建。


3.通过调用start方法开启线程。

 

 创建线程方式二


实现Runnable接口
1.子类覆盖接口中的run方法。


2.通过Thread类创建线程,并将实现了Runnable接口的子类对象作为参数传递给Thread类的构造函数。


3.Thread类对象调用start方法开启线程。

 

线程安全问题


导致安全问题的出现的原因:

1.多个线程访问出现延迟。

2.线程随机性 。


注:线程安全问题在理想状态下,不容易出现,但一旦出现对软件的影响是非常大 的。

 

同步(synchronized)
格式:
synchronized(对象)
{
需要同步的代码;
}

同步可以解决安全问题的根本原因就在那个对象上,该对象如同锁的功能。

同步的特点
同步的前提:


1.同步需要两个或者两个以上的线程。


2.多个线程使用的是同一个锁。


未满足这两个条件,不能称其为同步


同步的弊端:
当线程相当多时,因为每个线程都会去判断同步上的锁,这是很耗费资源的,无形 中会降低程序的运行效率

 同步函数
格式:
在函数上加上synchronized修饰符即可。
思考:同步函数用的是哪个锁呢?(this)

线程间通信


思考1:wait(),notify(),notifyAll(),用来操作线程为什么定义在了Object类中?


1,这些方法存在与同步中。
2,使用这些方法时必须要标识所属的同步的锁。
3,锁可以是任意对象,所以任意对象调用的方法一定定义Object类中。


思考2:wait(),sleep()有什么区别?


wait():释放cpu执行权,释放锁。
sleep():释放cpu执行权,不释放锁

 

 

停止线程


1.定义循环结束标记
因为线程运行代码一般都是循环,只要控制了循环即 可。
2.使用interrupt(中断)方法。
该方法是结束线程的冻结状态,使线程回到 运行状态中来。


注:stop方法已经过时不再使用。

线程类的其他方法
setPriority(int num)  更改线程的优先级。


setDaemon(boolean b)  将该线程标记为守护线程或用户线程。


join()  等待该线程终止


setName(String name) 自定义线程名称   改变线程名称,使之与参数 name 相同。


toString() 返回该线程的字符串表示形式,包括线程名称、优先级和线程组。

yield()
          暂停当前正在执行的线程对象,并执行其他线程。

 

 

 

 

------- android培训java培训、期待与您交流! ---------- 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值