A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

基础篇之《线程》
@author :kern
————————————————————————————————————————————————————————————————
一:进程:是一个正在执行的程序。每一个进程都有一个执行顺序,该顺序是一个执行路径,或者叫一个执行单元。
二:线程:是进程中的一个独立的控制单元,线程在控制着进程的执行。一个进程中至少有一个线程。
三:多线程:
3.1 继承Thread类创建线程
  方法:①创建一个类继承Thread类。
        ②复写Thread类的run方法。
        ③创建子类对象,调用Thread类的start方法,该方法作用是开始线程,调用run方法。
      
3.2线程的运行状态:
  ① 创建
  ② 运行
  ③ 冻结 有两种情况,一是sleep(时间),时间一到就唤醒了;二是wait(),要被notify()唤醒。
  ④ 消亡 有两种情况,一是stop(),二是run()方法运行结束后,线程会自动消亡。
  ⑤ 阻塞 又叫临时状态,即有执行资格但是没有执行权。
3.3 实现Runnable接口创建线程
  方法:①创建类然后实现Runnable接口。
        ②复写Runnable接口的run()方法。
        ③通过Thread类创建线程对象,
        ④创建Runnable接口的子类对象,然后将其对象作为实际参数传递给Thread类的构造函数。
        ⑤调用Thread类的start()方法,开启线程调用run()方法。

3.4 继承和实现的区别:
  实现Runnable接口避免了单继承的局限性。Runnable实现的同时还可以继承。
3.5 线程的安全问题:这里就说说线程中我们最常见的问题---执行资格和执行权的问题。
  a。问题原因:当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完,
  另一个线程参与进来执行,导致共享数据的错误。
  b。解决方案:对多条线程作为共享数据语句,只能让一个线程都执行完了。在执行的过程中,其他线程不可以参与执行。
   同步代码块:synchronized(对象)
     {
        需要被同步的代码;
     }
   注:对象可以为任意对象 如:Object obj=new Object(); 对象如同锁,持有锁的可以再同步中执行,
   没有持有锁的即使获取cpu的执行权也进不去。
3.5 同步的两种表现形式:
  a。同步代码块;见3.4
  b。同步函数:直接将synchronized作为修饰符修饰函数。
3.6 锁;a。同步函数用的是哪一个锁呢?
     函数需要被对象调用,那么函数都有一个所属对象,就是this。所以同步函数使用的锁是this。
  b。如果同步函数被静态修饰,那么使用的锁是什么呢?
     静态方法中不可以定义this。静态进内存时,内存中没有本类对象,但是一定有该类对应的字节码文件。
     类名。class,该对象的类型是class。所以静态同步方法,使用的锁是该方法所在类的字节码文件,类名。class;
四:线程间通信 :就是多个线程操作同一个资源,单单是操作的动作不同;
4.1 wait(),notify(),notifyAll(),用来操作线程,为什么定义在Object类中?
     a。这些方法存在与同步中。
     b。使用这些方法时必须要标识所属的同步的锁;
     c。锁可以使任意对象,所以任意对象调用的方法一定定义在Object类中。
    ☆ 也就是说,等待和唤醒必须是同一个锁,而锁可以是任意对象所以可以被任意对象调用的方法定义在Object类中。
4.2 wait(),sleep()有什么区别?
     wait()释放资源,释放锁。
     sleep()释放资源,不释放锁。
4.3 JDK1.5的特性:提供了多线程升级解决方案。
     a。将同步synchronized替换成Lock操作。
     b。将Object中的wait,notify,notifyAll替换成condition对象。该对象可以通过Lock锁进行获取。
4.4 停止线程:
     a。如何停止线程呢?
     ·原理:只有一种,run()方法结束。开启多线程运行,运行代码往往是循环结构,只要控制循环语句,就可以让run()方法结束。
     ·特殊情况:当线程处于停滞状态时,就无法读取标记结束循环语句,那么线程就不会结束,这时需要对冻结进行清除。
               强制让线程恢复到运行状态,这样就可以操作标记结束线程。于是Thread类中提供了方法interrupt().
4.5 守护线程:void setDaemon(boolean on) 该方法必须在启动线程前使用。
4.6 join() 等待线程终止:即当A线程运行到B线程的join方法时,那么A线程就会等待,等待B线程全部运行结束再运行。
4.7 优先级;指线程抢到CUP的执行权的频率。默认优先级为5,最高为10;设置优先级setPriority()方法。
-----------------------------------------------------------------------------------------------------
我是一个菜菜菜菜鸟,想飞却怎么也飞不高,寻寻觅觅,寻寻觅觅·····
自学的过程中总结出来的一些关于函数的知识点,我就当一次复习了。
有需要的可以参考一下,如有漏掉的或者不完善的谢谢大家指正。

评分

参与人数 1技术分 +1 收起 理由
付江涛 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
看起来不错哦
回复 使用道具 举报
挺不错!
回复 使用道具 举报
不错 线程刚看到一半 谢谢分享 帮助我理解了 谢谢了~
回复 使用道具 举报
谢谢 楼主 分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马