Java SE多线程初接触(笔记整理)

多线程

1.1什么是线程?什么是进程?

  • 进程是一个应用程序(1个进程是一个软件)。
  • 线程是一个进程中的执行场景/执行单元。
  • 一个进程可以启动多个线程。

1.2Java的线程原理

对于java程序来说,当在DOS命令窗口中输入:
java HelloWorld 回车之后。
会先启动JVM,而JVM就是一个进程。
JVM再启动一个主线程调用main方法
同时再启动一个垃圾回收线程负责看护,回收垃圾
最起码,现在的java程序中至少有两个线程并发
一个是垃圾回收线程,一个是执行main方法的主线程

1.3进程与线程的关系

  • 进程A和进程B的内存独立不共享。

  •  		在java语言中:
     		线程A和线程B,堆内存和方法区内存共享。
     		但是栈内存独立,一个线程一个栈。
     		假设启动10个线程,会有10个栈空间,每个栈和每个栈之间,
     		互不干扰,各自执行各自的,这就是多线程并发。
    
  •  	火车站,可以看做是一个进程。
     	火车站中的每一个售票窗口可以看做是一个线程。
     	我在窗口1购票,你可以在窗口2购票,你不需要等我,我也不需要等你。
     	所以多线程并发可以提高效率。
     	java中之所以有多线程机制,目的就是为了提高程序的处理效率。
    

1.4思考:

使用了多线程机制之后,main方法结束,是不是有可能程序也不会结束?

main方法结束只是主线程结束了,主栈空了,其它的栈(线程)可能还在压栈弹栈。
在这里插入图片描述

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

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

  • 什么是真正的多线程并发?
    t1线程执行t1的。
    t2线程执行t2的。
    t1不会影响t2,t2也不会影响t1。这叫做真正的多线程并发。

  • 单核的CPU表示只有一个大脑: 不能够做到真正的多线程并发,但是可以做到给人一种“多线程并发”的感觉。
    对于单核的CPU来说,在某一个时间点上实际上只能处理一件事情,但是由于CPU的处理速度极快,多个线程之间频繁切换执行,跟人来的感觉是:多个事情同时在做。

     	例:
     		线程A:播放音乐
     		线程B:运行魔兽游戏
     		线程A和线程B频繁切换执行,人类会感觉音乐一直在
     		播放,游戏一直在运行,给我们的感觉是同时并发的。
    

1.5java实现线程的两种方式

第一种方式:编写一个类,直接继承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.6线程的生命周期

新建状态
就绪状态
运行状态
阻塞状态
死亡状态
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值