黑马程序员—学习java基础4日志

  1. ------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------


  2. 一,多线程
  3.   1,线程就是进程中的一个独立的控制单元,线程在控制着进程的执行,一个线程中至少有一个线程。
  4.        Java VM 启动的时候会有一个进程java.exe
  5.        该进程中至少有一个线程负责java程序的执行,而且这个线程运行的代码存在于main方法中,该线程成为主线程。
  6.   2,创建线程的第一种方式:继承Thread类
  7.      步骤:1,定义类继承Thread
  8.           2,复写Thread类中的run方法
  9.              目的:将自定义代码存储在run方法中,让线程运行。
  10.           3,调用线程的start方法
  11.               该方法两个作用:启动线程,调用run方法。 
  12.      发现运行结果每一次都不同,因为多个线程都获取cpu的执行权。cpu执行到谁,谁就运行。
  13.      明确一点,在某一个时刻,只能有一个程序在运行(多核除外),cpu在做着快速的切换,以达到看上去是同时运行的效果。
  14.        这就是多线程的一个特性:随机性,谁抢到谁执行,至于执行多长,cpu说了算。
  15.      
  16.     为什么要覆盖run方法?
  17.     Thread类用于描述线程。
  18.     该类就定义了一个功能,用于存储线程要运行的代码,该存储功能就是run方法,也就是说Thread类中的run方法,用来存储线程要运行的代码。
  19.    


  20.      3.创建线程方式二:实现Runnable接口
  21.        步骤:
  22.        1,定义类实现Runnable接口。
  23.        2,定义类实现Runnable接口中的run方法,将线程要运行的代码存放在该run方法中
  24.        3,通过Thread类建立线程对象。
  25.        4,将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。
  26.           为什么要将Runnable接口的子类对象传递给Thread的构造函数。
  27.           因为,自定义的run方法所属的对象是Runnable接口的子类对象。
  28.           所以要让线程去指定对象的run方法,就必须明确该run方法所属对象。
  29.        5,调用Thread类的start方法开启线程并调用Runnable接口子类的run方法
  30.      
  31.      实现方法和继承方法有什么区别?
  32.      实现方式好处:避免了单继承的局限性。 在定义线程时,建议使用实现方法。
  33.      两种方法的区别:
  34.         继承Thread:线程代码存放Thread子类run方法中。
  35.         实现Runnable:线程代码存在接口的子类的run方法。


  36.      6,锁:
  37.          对象如同锁,持有锁的线程可以在同步中执行。
  38.          没有持有锁的线程即使获取cpu的执行权也进不去,因为没有获取锁。
  39.        同步的前提:
  40.        1,必须要有两个或者两个以上的线程。
  41.        2,必须是多个线程使用同一个锁。
  42.        3,必须保证同步中只能有一个线程在运行。
  43.        好处:解决了多线程的安全性问题。
  44.        弊端:多个线程需要判断锁,较为消耗资源。


  45.       同步函数用的是哪一个锁呢?
  46.       函数需要被对象调用,那么函数都有一个所属对象引用,就是this,所以同步函数使用的锁是this

  47.       如果同步函数被静态修饰后,使用的锁是什么呢?
  48.       通过验证,发现不再是this,因为静态方法中也不可以定义this
  49.        所以静态的同步方法,使用的锁是该方法所在类的字节码文件对象。类名.class




  1.      7,死锁:
  2.           




  3. 二,停止线程。
  4.    想要停止线程就是让run方法结束
  5.    开始多线程运行,运行代码通常是循环结构,只要控制住循环,就可以让run方法结束,也就是线程结束。

  6.   特殊情况:
  7.     当线程处于了冻结状态,就不会读取到标记。那么线程就不会结束。
  8.     当没有指定的方式让冻结的线程恢复到运行状态时,这时需要对冻结进行消除,
  9.      强制让线程恢复到运行状态中来,这样就可以操作标记让线程结束。
  10.    Thread类提供该方法 interrupt();


  11. 三,join:可以用来临时加入线程执行。
  12.    当A线程执行到了B线程的.join()方法时,A就会等待,等B线程都执行完,A才会执行。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值