多线程基础学习

了解几个概念:
    1.  进程:对于cpu来说就是正在执行的的一个独立的程序。(在宏观上来说是并发的,在微观上来说是串发的)
    2.  线程:在一个进程内部的‘可以并发执行的多个函数’,一个进程可以有多个线程
   
注意:
    1.每个进程都是独立的数据空间(是一个程序的执行流程)
    2.线程生活在进程内部,他们是共享进程的空间的,线程是有操作系统(os)来维护的
 
JAVA创建线程的方式:
    1.将方法类声明成Thread子类,子类重写Thread类和run方法。
      如:
         class ThreadA extends Thread {
                Private String name;
                Public ThreadA(String name) { this.name = name; }
               Public void run() {
                     //具体代码
 
               }
           }
 
       2.实现Runnable接口,然后实现run方法.然后创建该类的实例,在创建Thread时作为参数传递
           如:
               class ThreadB implements Runnable {
 
                  Public void run() {
                    //具体代码
 
              }
           }
 
      具体实现如下:
           
               Thread a = new ThreadA(“a”); //创建一个线程
               a.start();//启动一个线程
 
               Runnable r = new ThreadB(); //创建一个Runnable 实例r
               Thread b = new Thread(r); //֯使用一个 Runnable 实例来创建线程
               b.start(); //启动一个线程
 
      总结:
           1.java中线程就是一个类(Thread),实际的线程就是一个对象。
           2.线程和线程对象不是一个概念,
                Thread t = new Thread();
                t代表了一个线程,也只是个线程对象,而不是线程,它可以到操作系统(OS)底层去初始话一个线程,即调用t.start()方法
 
           3.Java虚拟机是一个虚拟进程,所有Java程序都是跑在此虚拟机进程上的线程,有OS来调度。
           4.实际上Java程序上的main方法就是一个主线程,一旦运行一个Java程序,主线程就开始运行,所以有人说Java是基于线程运行的。
           5.虚拟机进程要等到所在的非守护线程都结束了,才能结束。在Java虚拟机中有一个垃圾回收线程,就是守护线程。
           6.再次声明实现,实现Runnable接口的类不是一个线程类,只是用它去构造一个线程对象。
           7.线程,对象(线程对象),方法的关系
              线程:哪个线程?
              对象:哪个线程对象?
              方法:哪个方法?
              如:在main() 中创建了一个Thread类对象t,并调用t.start()。//表示:主线程对t线程对象调用了start()方法。
 
      例子:
              
  
          Public class TestThread {
                Public static void main(String[] args) {
                           Thread t1 = new MyThread();
                           Runnable r = new YouThread();
                           Thread t2 = new Thread(r);
                            t1.start(); //启动t1线程
                             t2.start();//启动t2线程
                            // main 线程结束
                }
 
          
             Class MyThread extends Thread {
                        Public void run() {
                        For(int i=0;i<1000;i++)
                             System.out.println(“####“ );
                         }
                    }
                  Class YouThread implements Runnable {
                          Public void run() {
                          For(int i=0;i<1000;i++)
                                System.out.println(Ā̞̞̞” );
                            }
                   }
              
 
    总结:上述例子中,主线程main方法就是为了启动t1和t2线程,在t2.start()后它就结束了,但可能t1,t2还在运行,所以进程不会退出。
 
              
 
 
       
 
posted @ 2020-07-27 00:05  小窝蜗  阅读(99)  评论(0)    收藏  举报