黑马程序员--java多线程

来源:互联网 发布:淘宝电子面单打印视频 编辑:程序博客网 时间:2024/06/02 07:03
   ------- android培训  java培训、期待与您交流! ----------
一、多程线的概念:
      什么是进程:正在运行的程序,程序会在内存开辟的一片空间
      什么是线程:进程中的一个执行单元,负责程序的控制单元
   进程与线程的关系;一个线程中至少包含一个线程。
       多线程:当一个进程中线程有多个时,就是多线程。
   为什么要用多线程:让多部分代码同时执行
   什么是同时执行:其实就是CPU在瞬间随机切换

二、开启新线程:

   1.继承Thread
      定义类继承Thread
      重写run方法,把新线程要做的事写在run方法中
      创建线程对象
      开启新线程, 内部会自动执行run方法



   2.实现Runnable
      定义类实现Runnable接口
      实现run方法,把新线程要做的事写在run方法中
      创建自定义的Runnable对象
      创建Thread对象, 传入实例Runnable对象
      调用start()开启新线程, 内部会自动调用Runnable的run()方法



   3.两种方式的区别
      a.由于子类重写了Thread类的run(), 当调用start()时,直接找子类的run()方法
      b.构造函数中传入了Runnable, 成员变量记住了它,start()调用run()方法时内部判断成员变量Runnable是否为空, 不为空则执行Runnable的run()

三.Thread类常用方法
    1.设置名字
      通过构造函数可以传入String类型的名字
      通过setName()方法可以设置线程对象的名字
    2.获取名字
      通过getName()方法获取线程对象的名字
   3.获取当前线程对象
      Thread.currentThread(), 主线程也可以获取
    4.休眠
      Thread.sleep(), 控制当前线程休眠若干毫秒
    5.守护
      setDaemon(), 设置一个线程为守护线程, 该线程不会单独执行,当其他非守护线程都执行结束后, 自动退出
    6.加入
      join(), 当前线程暂停, 等待指定的线程执行结束后, 当前线程再继续
      join(int), 可以等待指定的毫秒之后继续

四、线程之间的同步

   1.什么是同步:当有多段代码要同时执行时,我们希望这段代码在执行的时候,CPU不要切换到其他线程上去

   2.同步代码块:就是在要同步的代码块中,加上synchnorized关键字,并加上锁对象,

   3.同步方法:就是在在方法的类型前,加上synchnorized的关键字
    
   疑问:锁对象的原理不懂
 



 
   4.线程安全问题
      多线程并发操作同一数据时, 就有可能出现线程安全问题
      使用同步技术可以解决这种问题, 把操作数据的代码进行同步, 不要多个线程一起操作

五.线程之间的通信
   1.什么时候需要通信
      多个线程并发执行时, 在默认情况下CPU是随机切换线程的
      如果我们希望他们有规律的执行, 就可以使用通信, 例如每个线程执行一次打印
    2.怎么通信
      如果希望线程等待, 就调用wait()
      如果希望唤醒等待的线程, 就调用notify();
      这两个方法必须在同步代码中执行, 并且使用同步锁对象来调用