Java中的多线程

本文详细解释了进程和线程的概念,指出Java中的多线程机制如何提高程序效率,并讨论了在单核和多核CPU环境下线程并发的差异。此外,还介绍了Java中实现线程的两种方式:继承Thread和实现Runnable接口。
摘要由CSDN通过智能技术生成

1.什么是进程?什么是线程?

 进程是一个应用程序(1个进程是一个软件)

 线程是一个进程中的执行场景/执行单元。

 一个进程可以启动多个线程。

2.对于Java程序来说,当在Dos命令窗口中输入:java helloworld 回车之后。

 会先启动JVM,而JVM就是一个进程。

 JVM再启动一个主线程调用main方法,同时再启动一个垃圾回收线程负责看护,回收垃圾。最起码,现在的java程序中至少有两个线程并发,一个是垃圾回收线程,一个是执行main方法的主线程。

3.进程和线程是什么关系?举个例子

   阿里巴巴:进程

     马云:阿里巴巴的一个线程

     童文红:阿里巴巴的一个线程

 进程可以看作是现实生活当中的公司。

 线程可以看作是公司当中的某个员工。

注意:进程A和进程B的内存独立不共享。

线程A和线程B呢?

    在java语言中:线程A和线程B,堆内存和方法区内存共享。但是栈内存独立,一个线程一个栈。

假设启动10个线程,会有10个栈空间,每个栈和每个栈之间,互不干扰,各自执行各自的,这就是多线程并发。

火车站可以看作是一个进程。

火车站中的每一个售票窗口可以看作是一个线程。

我在窗口1购票,你可以在窗口2购票,你不需要等我,我也不需要等你。

所以多线程并发可以提高效率。

Java中之所以有多线程机制,目的就是为了提高程序的处理效率。

4.使用了多线程机制之后,main方法结束,只是主线程结束了,主栈空了,其他的栈(线程)可能还在压栈弹栈。

5.对于单核的CPU来说,真的可以做到真正的多线程并发吗?

对于多核的CPU电脑来说,真正的多线程并发是没有问题的。4核CPU表示同一个时间点上,可以真正的有4个进程并发执行。

 什么是真正的多线程并发?

    t1线程执行t1的。

    t2线程执行t2的。

    t1不会影响t2,t2也不会影响t1。这就叫做真正的多线程并发。

单核的CPU表示只有一个大脑:

   不能够做到真正的多线程并发,但是可以做到给人一种”多线程并发“的感觉。

对于单核的CPU来说,在某一个时间点上实际上只能处理一件事情,但是由于CPU的处理速度极快,多个线程之间频繁的切换程序执行,根人来的感觉是:多个事情同时在做!!!

电影院采用胶卷播放电影,一个胶卷一个胶卷播放速度达到一定程度之后,人类的眼睛产生了错觉,感觉是动画的。这说明人类的反应速度很慢,就像一根钢针扎到手上,到最终感觉到疼,这个过程是需要”很长的“时间,在这个期间计算机可以进行亿万次的循环。所以计算机的执行速度很快。

6.java语言中,实现线程有两种方式。

    java支持多线程机制,并且java已经将多个线程实现了,我们只需要继承就行了。

    第一种方式:编写一个类,直接继承java.lang.Thread,重写run方法。

    //定义线程类

    public class MyThread extends Thread{

      public void run(){

      }

    }

    //创建线程对象

    Mythread t = new MyThread();

   //启动线程

     t.start();

   第二种方式:编写一个类,实现java.lang.Runnable接口,实现run方法。

     //定义一个可运行的类

      public class MyRunnable implements Runnable{

         public void run(){

         }

     }

     //创建线程对象

     Thread t = new Thread(new MyRunnable());

   //启动线程

     t.start();

分析以下程序,有几个线程,出垃圾回收器之外。

   1个线程(因为程序只有1个栈)

  public class ThreadTest01{

     public static void main(String[] args){

       System.out.println("main begin");

       m1();

       System.out.println("main over");

     }

     public static void m1(){

       System.out.println("m1 begin");

       m2();

       System.out.println("m1 over");

      }

      public static void m2(){

        System.out.println("m2 over");

         m3();

        System.out.println("m2 over");

      }

      public static void m3(){

         System.out.println("m3");

      }

    }

 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值