day--16

GUI编程 都快淘汰了 所以暂时还是不看了

多线程(多任务)

  • 程序: 程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。

  • 进程 在操作系统中运行的程序就时进程,比如你的QQ,播放器,IDE灯

       1. 进程里面有很多,比如声音、图像、字幕这些就是线程 
       1. 进程是执行程序的一次执行过程,它是一个动态的概念。是系统资源分配的单位
       1. 进程中可以包含若干葛线程,一个进程中至少有一个线程,不然没有存在的意义。线程是CPU调度和执行的单位。
    
  • 线程:很多线程是模拟出来的,真正的多线程是指有多个CPU,即多核,如服务器。如果是模拟出来的多线程,即在一个cpu的情况下,在同一个时间点,cpu只能执行一个代码,因为切换的快,所以就有同时执行的错觉。 "main" 就是主线程

核心概念

  • 线程就是独立的执行路径;
  • 在程序运行时,即使没有自己创建线程,后台也会有多个线程,如主线程,gc(清理垃圾的)线程;
  • main()称之为主线程,为系统的入口,用于执行整个程序;
  • 在一个进程中,如果开辟了多个线程,线程的运行由调度器(cpu)安排调度,调度器是与系统紧密相关的,先后顺序是不能人为干预的。
  • 对同一份资源操作时,会存在资源抢夺的问题,需要加入并发控制;
  • 线程会带来额外的开销,如cpu调度世间,并发控制开销。
  • 每个线程在自己的工作内存交互,内存控制不当会造成数据不一致

线程创建:Thread、Runnable、Callable

![](C:\Users\Administrator\Downloads\screenshot (3).jpeg)

  • 创建一个新的执行线程有两种方法: 自定义线程类继承Thread类;重写run()方法,编写线程执行体;创建线程对象,调用start()方法启动线程

    1. 将一个类声明为Thread 的子类。这个子类应该重写 run 类的方法Thread。然后可以分配并启子类的实例。例如,计算大于规定的素数的线程可以写成如下:

      //创建线程方式一:1、继承Thread类,2、重写run()方法,3、调用start开启线程
      public class TestThread1 extends Thread{    //继承Thread
          @Override       //重写
          public void run(){
              super.run();
              //run 方法线程体
              for(int i = 0;i<20;i++){
                  System.out.println("我在看代码———"+i);
              }
          }
          
          public static void main(String[] args){
              //main线程,主线程
              
              //创建一个线程对象
              TestThread1 testThread1 = new TestThread1();
              
              //调用start()方法开启线程
              testThread1.start();
              
              for(int i = 0;i<20;i++){
                  System.out.println("我在学习多线程——"+i);
              }
              
              
          }
      }
      
      总结:注意,线程开启不一定立即执行,由CPU调度执行。
      //java文档里提供的代码
      
      class primeThread extends Thread{
          liong minPrime;
          primeThread(long minPrime){
              this.minPrime = minPrime;
          }
          public void run(){
              //compute primes larger than minPrime
              ...
          }
      }
      _______________________________________________
         然后,以下代码将创建一个线程并启动它运行:
          primeThread P = new PrimeThead(143);
          P.start();
      
    2. 另一种方法来创建一个线程是声明实现类Runnable接口。那个类然后实现了run方法。然后可以分配类的实例,在创建Thread时作为参数传递,并启动。这种其他风格的同一个例子如下所示:

      //创建线程方式二:1.实现runnable接口,2.重写run方法,3.执行线程需要丢runnable接口实现类,调用start方法。 
      public class TestThread3 implements Runnable{
          @Override
          public void run(){
              //run方法线程体
              for(int i = 0;i<200;i++){
                  System.out.println("我在看代码---"+i);
              }
          }
          public static viod main(String[] args){
              /**创建线程对象,通过线程对象来开启我们的线程,代理
                 Thread thread = new Thread(testThread3);
                 thread.start();
              */
              new Thread(testThread3).start();
              for(int i = 0;i<1000;i++){
                  System.out.println("我在学习多线程---"+i);
              }
          }
      }
      
      
      //JAVA	文档里提供的实现代码
      class PrimeRun implements Runnable{
          long minPrime;
          primeRun(long minPrime){
              this.minPrime = minPrime;
          }
          
          public void run(){
              // compute primes larger than minPrime
              ...
          }
      }
      
      
      //创建一个线程并启动它运行
      PrimeRun p = new PrimeRun();
      new Thead(p).start();
      

    P4 如何实现多线程下载的案例代码

posted on 2022-05-13 19:46  遇见上帝  阅读(35)  评论(0)    收藏  举报