复习八(多线程)

Posted hq0422

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了复习八(多线程)相关的知识,希望对你有一定的参考价值。

1.进程:进程是应用程序执行的实例,进程有独立的内存空间和系统资源

2.线程:线程是cpu调度和分配的基本单位,线程是进程中执行运算的最小单位,可以完成一个独立的顺序控制流程

 

一个进程中同时运行了多个线程用来完成不同的工作称之为多线程

多线程是交替占用cpu资源而并非真正的一起执行

 

多线程优点:

    1.充分利用CPU资源

    2.简化编程模型

    3.带来良好的用户体验

java提供了java.long.Thread类支持线程编程

 

主线程:main()方法为主线程入口,产生其他子线程的线程必须最后完成执行因为他执行各种关闭操作

获取主线程对象:

  Thread  thread=Thread.currentThread();

创建线程:

    1.继承Thread类

      1.定义一个类继承Thread

      2.重写run方法

      3.使用start()方法启动线程

    2.实现Runnable接口

      Threa thread=new Thread(实现接口的类名);

      thread.start();

继承Thread 类编写简单可以直接操作线程适用于单线程

实现Runnable类 避免了单继承的局限性便于共享资源

技术图片

 

线程调度:按照特定的机制为多个线程分配cpu资源的使用权

线程方法:

    .setPriority(等级) :设置线程优先级 默认为5 数越大优先等级越高

    .sleep(毫秒数) :线程睡眠

    .join() :强制执行

    .yield() :暂停本线程执行其他线程(该线程状态处于就绪状态而不是阻塞状态)

    .interrupt() :中断线程

    .isAlive() :测试线程是否处于活动状态

线程的礼让只是提供了一种可能,但不一定会实现

当多个线程操控同一个数据时会造成数据不安全问题,可以使用Synchronized修饰方法控制对类成员的访问,控制资源一次只能一个线程进行操作

例:

public Synchronized void 方法名(){

}
          或        

synchronized(同步对象 ,this表示当前对象){


}

当一个线程访问一个同步代码块时其他的所有线程都不能访问,除非代码块不是同步的

                        方法是否同步                 效率              适合的场景

   线程安全:                是                       低               多线程共同开发

 非线程安全:                否                       高               单线程

 

线程池: 因为线程缺乏统一管理占用过多的系统资源,缺乏更多的功能入定时执行定期执行等功能所有产生了线程池

线程池的好处:

    1.重用存在的线程减少对象创建,消亡的开销

    2.有效的控制最大并发数提高系统资源使用率

    3.定时执行与定期执行

线程池所在的包:java.util.Concurrent 顶级接口为 Executor 实现线程池的类是 ExecutorService

java.util.Concurrent.Executors 类提供创建线程池的方法

  new CachcdThreadPool(); 创建一个可缓存的线程池

  new SingleThreadExecutor(); 创建一个单线程的线程池 只有一个线程

  new FixedThreadPool(线程数量);创建一个固定的线程池

  new ScheduledThreadPool(线程数量);创建一个固定长度的线程池可以设置定时来执行

 

 

 

 

以上是关于复习八(多线程)的主要内容,如果未能解决你的问题,请参考以下文章

复习打卡--0821多线程并发

多线程 Thread 线程同步 synchronized

Java复习——多线程与并发库

多线程(八):多线程高阶

多线程(八):多线程高阶

多线程(八):多线程高阶