java多线程

---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

1多线程概念

线程与进程

进程就是一个运行中的程序。

一个进程中可以有多个线程,线程是CPU调度和分派的基本单位。我们可以理解为线程就是程序运行中的一条路径。

多线程存在的意义

允许多个线程并发执行,提高程序运行效率。

例如:迅雷多线程下载,QQ多个人同时聊天,凌波多个人同时共享屏幕。

2线程的使用

创建线程有两种方式

自定义一个类继承Thread类,将线程要做的事写在run()方法中,由于子类可以当父类来用,创建自定义子类对象就是创建了一个线程。

自定义一个类实现Runnable接口,将要做的事写在run()方法中。创建Thread对象时在构造函数中传入Runnable实现类对象。

线程的启动

两种创建方式都是调用Thread对象的start()方法。

当调用start()方法时,CPU会开启一条新线程,并在新线程上执行run()方法。

线程常用方法

currentThread

静态方法,用来获取当前线程

getNamesetName

用来获取、设置当前线程的名字

sleep

控制线程休眠,单位为毫秒

setDaemon

将线程设置为守护线程。线程默认是非守护线程,守护线程不能单独执行。

join

当前线程暂停,等待加入的线程运行结束,当前线程继续执行。

3多线程同步

线程安全问题

多线程并发访问同一数据,有可能出现线程安全问题。

一条线程的访问还没有结束,CPU切换到另一条线程工作,导致数据访问出错。

使用同步解决线程安全问题

使用同步代码块synchronized(锁对象){需要同步的代码...}形式将访问数据的代码锁住,在同步代码块中的内容同一时间内只能一个线程执行。

使用同步方法,用synchronized修饰方法,整个方法的代码都是同步的,只能一个线程运行。同步方法使用this作为锁。

死锁

在多个线程并发执行使用多个锁来同步时,有可能互相冲突,导致程序无法继续执行。

同步的优点与缺点

同步可以解决多个线程同时访问一个共享数据的问题,只要加上同一个锁,在同一时间内只能有一条线程执行。

在执行同步代码时每次都会判断锁,非常消耗资源,效率较低。

4多线程通信

在同步代码中可以使用锁对象的wait()方法让当前线程等待

使用锁对象的notify()方法可以将正在等待的线程唤醒

如果多个线程都在等待,notify()唤醒随机1

notifyAll()方法可以唤醒所有在等待的线程

 ---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值