黑马程序员.Android攻城狮.JAVA基础.1.5.Java多线程

Java多线程

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


1、多线程的概念
由于计算机CPU计算速度很快,且具备分时机制,所以每个进程都能够循环获取自己的时间片,就像是多个程序在同时运行一样,多线程是并发执行的有效手段之一,多线程就是指一个进程在执行的时候可以产生多个更小的程序单元,这些线程单元可以同时存在、同时运行。

2、多线程的实现
Java中实现多线程有两种方法:
(1)继承Thread类
继承Thread的类必须覆写run()方法,并调用Thread类中得start()方法才能开启多线程,且start()方法只能调用一次。
该方法具有局限性,因为类不能多继承,所以继承了Thread类的子类不能再继承其他类。
(2)实现Runnable接口
通过实现Runnable接口也可以实现多线程,并打破了单继承的局限性,但是还需要依靠Thread类中的start()方法开启多线程

线程创建过程:
(1) 定义类实现Runnable接口
(2)覆盖接口中的run方法(用于封装线程要运行的代码)
(3)通过Thread类创建线程对象
(4)将实现了Runnable接口的子类对象作为实际参数传递给Thread类中的构造函数
(5)调用Thread对象的start方法。开启线程,并运行Runnable接口子类中的run方法

使用Runnable的优势:
(1)适合多个相同程序代码的线程去处理同一资源
(2)避免单继承的局限性
(3)增强了程序的健壮性,代码能够被多个线程共享,代码与数据是独立的

注意: 程序运行中至少有两个线程在运行,一个是主函数的主线程,另一个是垃圾回收的线程。

3、线程的状态
任何线程都一般具有5种状态:创建、就绪、运行、阻塞、死亡。


(1)新建:利用构造方法创建一个线程对象后,新的线程对象就处于新建状态
(2)就绪:调用该线程的start()方法就可以启动线程,当线程启动时处于就绪状态,等待进入线程队列
(3)运行:就绪的线程被调用并获得CPU资源时,线程进入运行状态,自动调用run()方法执行该线程的功能
(4)阻塞:在被人为挂起或者执行耗时的操作时,会暂停自己的操作进入阻塞状态,当阻塞原因被消除后重新进入就绪状态
(5)死亡:线程调用stop()方法或者run()方法执行结束后,线程即进入死亡状态,不再具有继续执行的能力

4、线程操作方法
由于Runnable接口中并没有对线程操作的方法,所以还是需要使用Thread类中的想关方法对对线程类进行操作。
(1)取得和设置线程名称:getName()与setName()
(2)判断线程是否启动:isAlive()
(3)线程的强制运行:join()
(4)线程休眠:sleep()
(5)中断线程:interrupt()

5、同步与死锁
一个多线程如果是通过Runnable实现的,那么类中的属性将被多个线程共享, 当多条语句在操作同一个共享数据时,一个线程对多条语句只执行了一部分,还没有执行完, 另一个线程参与进来执行,就会导致共享数据的错误。
解决方法:
(1)同步代码块
synchronized(同步对象){
需要同步的代码
}
该方法中对象被加锁,加锁的线程可以在同步是执行,而其他线程即使获得了cpu执行权也不能够执行被加锁的代码块
缺点为耗费资源

(2)同步方法
synchronized 返回值 方法名称(参数列表){
执行代码
}

死锁:死锁是指两个线程都再等待对方先完成,造成了程序的停滞,一般程序的死锁都是在程序运行时出现的。

6、线程间通信
线程间通信就是说多个线程都在操作统一资源,但是操作的动作是不同的
资源的同步操作:生产者与消费者
如果想要生产者不重复生产,消费者不重复消费,则需要增加一个标志位,以及使用等待与唤醒机制

7、Lock接口
在升级为JDK1.5后,线程间同步通信问题得到了更好的解决,即出现了Lock接口, Lock 替代了synchronized, Condition 替代了 Object监视器方法。


---------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值