Day11第十一天java基础---------线程

来源:互联网 发布:淘宝有什么好吃的零食 编辑:程序博客网 时间:2024/05/20 19:29

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

1、线程:
 线程是进程中的内容,它是程序中的控制单元或者执行路径,线程是一个执行中的程序,每一个
 的进程都有一个执行顺序,该顺序是一个执行路径,或者叫一个控制单元。
2、线程就是进程中真正的执行单元,就是进程中一个独立的控制单元,线程控制着进程的执行,
3、一个进程至少有一个线程。
4、java的jvm启动的时候会有一个进程为java.exe。该进程中至少有一个的线程扶着java程序的执行。
   而这个线程运行的代码存在于main的方法中,该线程也称为主线程。
5、说明:
 更细节的说明了jvm启动的时候不知一个线程执行,因为还有一个是垃圾回收机制的线程。
6、有多条线执行路径的的程序称为多线程程序。
7、创建线程的方式一:
 继承Thread类:
 步骤:
 (1)、定义继承Thread类
 (2)、覆写Thread类中的的run方法。
 (3)、调用线程的start方法, 该方法有两个作用一个是启动该线程 二是调用run方法
 new创建好了一个对象就是常见好了一个线程。
8、多线程程序的运行结果:
 发现在线程运行后每次的结果都不一样式因为该线程在获取cpu的执行权 ,谁获取到了执行
 权 谁就执行,明确一点 在某一时刻只能有一个程序运行,cpu在做着快速的切换,以达到看上
 去是一起执行的效果。我们可以把cpu形象的比喻成线程的运行行为就是相互的抢夺cpu的资源
 (执行权)这就是线程的一个特性。
9、start方法和run方法的区别:
 start是开启线程并执行线程的run方法。
 run仅仅是调用,线程创建了并没有运行。
10、wait()等待, notify()唤醒  等待执行后必须通过notify()进行唤醒。
11、currentThread()是获取当前对象,是静态的方法是可以通过类名进行调用的。
12、两个Thread类中的方法:
 getName:获取线程的名称。
 setName:设置线程的名称。
13、illegalThreadStateException:无效的线程异常。
14、如果想是线程必须是继承Thread或者是继承Thread的子类。
15、在创建线程对象的时候就要明确要使用那段代码,因为要使用的代码必须的放在run方法中。也就是
放在复写了Thread类的子类中的run方法中。
16、创建线程方式二:
 实现Runnable接口
 步骤:
 (1)、定义实现Runnable接口
 (2)、覆盖Runnable接口中的run方法。
 (3)、通过Thread类建立对象。
 (4)、将Runnable接口的子类对象作为事件参数进行传递给Thread类的构造函数。
 (5)、调用Thread类中的start方法开启线程并调用Runnable接口子类中的run方法。
17、为什么要将Runnable接口的子类对象传递给Thread的构造函数:
 因为自定义run方法所属的对象时runnable及人口的子类对象所以要让线程去调用指定对象的
 run方法就必须明确run方法所属的对象。
18、实现Runnable接口和继承Thread类的区别:
 实现的好处:是避免了java中单继承的局限性,在定义线程的时候建议使用实现Runnable接口的方式
 存放的位置不一样:
 继承是存放在Thread类的子类中,而实现是存放在Runnable的子类中
19、多线程说的安全问题:
 当多条语句在操作同一个线程共享数据的时候,一个线程对多条语句的时候只执行一部分的时候,另外一个进程参与进来
 导致共享数据错误。
20、多线程的解决办法:
 在多条操作共享数据的语句的时候,只能让一个线程都执行完全部的执行语句,在执行过程中,
 其他语句不可以参与执行。
21、java提供了专业的解决方法:
 就是同步代码块:

synchronized(对象){    //同步的语句}

原理:synchronized如同锁一样,把要同步的代码块全部锁住,没有持有锁的进程,即使获取了
 cup的执行权也不能去执行语句,因为没有锁。
22、同步的前提:
 (1)、必须有两个以上的进程。
 (2)、必须是多个线程使用同一个锁。

22、同步的利与弊:
 好处:能够解决线程的安全问题。
 坏处:消耗资源。
23、如何使用同步代码块:
 (1)、明确哪些代码块是是多线程的运行代码。
 (2)、明确哪些是要共享的数据。
 (3)、明确多线程运行代码中哪些语句是操作共享数据的。
24、同步函数直接把synchronized放到函数关键字的位置上去 就省略了对象,但是前提是类中所有的
 语句都是共享的数据
25、同步的两种表象:
 (1)、同步代码块。
 (2)、同步函数。
26、同步函数和静态同步函数使用的对象:
 同步函数使用的锁是this
 静态同步函数使用的说是类的字节码文件。
27、单例设计模式中的懒汉式:
 代码:

class single{  private static single = null;  private void single(){}  public static single get()  {   if(a==null)   {    synchronized(single.class)//由于是静态的所以不能使用this    {     if(a==null)      return s;    }   }  } }


 如果在使用单例的设计模式的时候建议是用恶汉式,因为懒汉式会有加载延迟,加载延迟
 会出现安全问题,出现问题时候可以加载同步函数,但是加同步函数的时候会使其低效,
 但是可以使用双重判定可以解决低效的问题。
28、死锁:
 就是同步中嵌套同步就产生了死锁。

 

原创粉丝点击