zoukankan      html  css  js  c++  java
  • Java 多线程分析 (六) ----三种方式实现Thread

    1.Java中线程和进程的理解:线程是进程较小的划分单位,一个进程至少有一个线程。

    多进程:操作系统能够执行不同的程序(window下既可以打开QQ,又可以打开播放器)

    多线程:在同一个程序中执行的不同的路径。线程是一个程序内部不同的执行的不同的路劲。

    总结:线程是进程的较小的划分单位,对于单核CPU而言,在某个时间段之内(时中周期)只能够执行一个线程(一条流水线),但是由于CPU的工作频段很高,所以我们感觉不到CPU在某个时钟周期上在执行一个内存,对于单核CPU和双核CPU而言,引发多并行和多并发的概念,

    加深对多线程理解,通过对其中内存的分析:在main主线程中遇到Thread。start(),在main上会自动的开辟一个分支线程,但是主线程还是会自动的运行,不会再此等待分支线程运行,在一个main函数有几个分支河流

    2.多并行 Vs 多并发

    并行:在同一个时钟周期上,程序并行运行(有多个CPU)

    并发:两个或者多个事件在一个时间间隔之内发生。

     3.如何开启多线程线程:继承方法和接口方法(常用)和采用匿名内部(对run方法进行重载)

    第一种:采用继承父类Thread的方法,同时对父类的run方法进行重写(不是重载):

     1 public class student extends Thread{
     2 //采用继承的方式,在子线程输出1到10
     3 public void run()
     4 {
     5 //这里对父类的方法进行重写
     6 for(int i=0;i<10;i++)
     7 {
     8 System.out.println(Thread.currentThread().getName()+"线程"+i);
     9 }
    10 }
    11 public static void main(String [] args)
    12 {    student s1=new student();
    13 Thread t1=new Thread(s1);
    14 t1.start();
    15 System.out.println("Main 线程");
    16 }
    17 }

    通过定义一个关于new student的s1对象,通过调用

     第二中采用的是实现接口的方式:

     1 public class student implements Runnable{
     2     //采用继承的方式,在子线程输出1到10
     3     public void run()
     4     {
     5     //这里对父类的方法进行重写
     6     for(int i=0;i<10;i++)
     7      {
     8         System.out.println(Thread.currentThread().getName()+"线程"+i);
     9       }
    10     }
    11     public static void main(String [] args)
    12     {    
    13         Thread t1=new Thread(new student());
         14 t1.start(); 15 System.out.println("Main 线程"); 16 } 17 }

    第三种:不同于第二种直接采用匿名类部类的方法对void run 方法直接重载,直接在Thread中对run方法进行重载,不需要用什么借口或者继承

     1 package ExecutorDemoPagage;
     2 
     3 public class student {
     4     //采用继承的方式,在子线程输出1到10
     5     
     6     public static void main(String [] args)
     7     {    
     8         new Thread(){
     9             public void run()
    10             {
    11             //这里对父类的方法进行重写
    12             for(int i=0;i<10;i++)
    13              {
    14                 System.out.println(Thread.currentThread().getName()+"线程"+i);
    15               }
    16             }
    17         }.start();
    18         System.out.println("Main 线程");
    19     }
    20 }

     4.线程的状态转换:这个就是线程运行过程中不同状态的转换

    5.设置线程的优先级别:

     1 Thread T1=new Thread(new Student());

    2 T1.SetProiority(Thread,NoRM_PRIORITY=3); 

  • 相关阅读:
    pacx & zr(yet)
    FileInputStream RandomAccessFile FileChannel 与 MappedByteBuffer (yet)
    结合自定义注解的 spring 动态注入
    redis事务与管道区别
    jdk动态代理与cglib优势劣势以及jdk动态代理为什么要interface
    maven scope属性值设置含义
    xc (yet)
    单链表 环
    适配器模式,将老接口的数据给新接口用
    移动硬盘无法拷贝大于4G的文件
  • 原文地址:https://www.cnblogs.com/woainifanfan/p/6602689.html
Copyright © 2011-2022 走看看