java学习笔记(18):单线程与多线程


进程:正在运行的程序
线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序(即一个程序运行后至少有一个进程,一个进程中可以包含多个线程)

单线程:没有安全隐患,但是工作效率很低,很慢

Thread类

一、创建新执行线程有两种方法:

(1)将类声明为Thread的子类,该子类应重写Thread类的run方法。

  • 创建线程步骤
    1 定义一个类继承Thread。
    2 重写run方法。
    3 创建子类对象,就是创建线程对象。
    4 调用start方法,开启线程并让线程执行,同时还会告诉jvm去调用run方法。

  • 举例如下

public class Demo {
    public static void main(String[] args) {
        threadDemo td = new threadDemo("小明");
        td.start();
        for(int i = 0;i<10000;i++){
            System.out.println("主线程main"+" "+i);
        }
    }
}

class threadDemo extends Thread{
    public threadDemo(String name){
        super(name);
    }
    public void run(){
        for(int i = 0;i<10000;i++){
            System.out.println("自定义线程"+" "+i);
        }
    }
}
  • 运行结果
    可以看到主线程和自定义线程是交替运行的,由于电脑配置较好,若i过小则看不出CPU在两个线程之间的不断切换。
    在这里插入图片描述
  • 线程对象调用 run方法和调用start方法区别
    线程对象调用run方法不开启线程。仅是对象调用方法。线程对象调用start开启线程,并让jvm调用run方法在开启的线程中执行。

(2)声明实现Runable接口的类,该类然后实现run方法

  • 创建线程的步骤。
    1、定义类实现Runnable接口。
    2、覆盖接口中的run方法。。
    3、创建Thread类的对象
    4、将Runnable接口的子类对象作为参数传递给Thread类的构造函数。
    5、调用Thread类的start方法开启线程。

  • 举例如下

public class Demo02 {
	public static void main(String[] args) {
	
		Runnable runn = new MyRunnable();
		//将Runnable接口的子类对象作为参数传递给Thread类的构造函数
		Thread thread = new Thread(runn);
		thread.start();
		for (int i = 0; i < 10; i++) {
			System.out.println("main线程:正在执行!"+i);
		}
	}
}

注: 继承Thread类和实现Runnable接口有啥区别
实现Runnable接口,避免了继承 Thread类的单继承局限性。同时,实现Runnable接口的方式,更加的符合面向对象,线程分为两部分,一部分线程对象,一部分线程任务。继承Thread类,线程对象和线程任务耦合在一起。一旦创建Thread类的子类对象,既是线程对象,有又有线程任务。实现runnable接口,将线程任务单独分离出来封装成对象,类型就是Runnable接口类型。Runnable接口对线程对象和线程任务进行解耦。

二、多线程的内存图(栈内存都是线程私有的)

在这里插入图片描述

三、线程的线程名

每个线程都有自己的名字。运行方法main线程,名字就是“main”;其他新建线程的名字默认为“Thread-0”、“Thread-1”

(1)获取线程的名字
父类Thread提供了一个方法

String getName()      //返回该线程的名称
static Thread  Thread.currentThread()   //返回当前正在执行的线程对象的引用

(2)修改线程的名字

setName()

线程的状态

在这里插入图片描述

线程池

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值