Java学习之多线程、内部类

本文详细介绍了Java中多线程的基本概念与实现方式,包括内部类与匿名内部类的应用、线程与进程的区别、线程的创建方法及线程状态等核心知识点。

内部类:

    定义在类中的类,成为内部类。

    好处是可以直接访问外部类中的成员(包括私有)。

    外部类想访问内部类需要创建内部类对象。

    

    匿名内部类:就是内部类的简化格式。

        内部类必须继承一个类或者实现接口,这种情况下的内部类可以简化成匿名内部类。

    格式: new 父类或者接口 () {定义子类的内容}

    匿名内部类就是一个子类对象。


多线程

    线程和进程:

        进程:一个正在运行的程序就是一个进程。

        线程:一个进程中有很多个线程。(每一个线程相当于一个执行的任务)


    开启一个线程 相当于开启了一个CPU的执行路径(相对独立)。

    CPU在执行多个线程的时候是随机的,跟线程的优先级有关。线程的调度采用分时调度,CPU会在多个线程中进行随机切换,优先级相同,时间片相同。


    单线程程序:

        特点:程序由上至下依次执行。(一个执行完,才会执行下一个)

        好处:数据绝对安全,不牵扯到操作共享数据。

        弊端:效率不高。


    主线程

        多线程的程序,除了主线程外,一般都叫子线程。

        一个程序只有一个主线程。

        main函数就是一个线程,并且是主线程。


        主线程(main函数)是如何被执行的

            JVM调用main函数 --> CPU为main函数开辟了一个执行路径 --> 相当于在这个执行路径中,执行main函数中的代码。

 

        Thread线程类(开辟一个主线程以外的子线程)

            1.创建Thread类的子类;

            2.重写run方法(run方法中是线程要执行的代码);

            3.调用start方法,开启线程(线程不能重复开启)。

        

        线程的创建:

           方式1:

class MyThread extends Thread{
	public MyThread() {
	}
	
	public MyThread(String name) {
		super(name);
	}
	@Override
	public void run() {
		
	}
	
}

        继承Thread类,后在main函数中声明子类的对象。

        方式2:使用接口的方式来创建

class RunnableImpl implements Runnable{
	
	@Override
	public void run() {
		
	}
	
}
     RunnableImpl runnableImpl = new RunnableImpl();
     // 创建一个线程类对象
     Thread thread = new Thread(runnableImpl);
     // 开启线程
     thread.start();

        方式3:用Thread的匿名内部类

    Thread thread = new Thread() {
	public void run() {
		System.out.println("子线程执行的方法");
	};
    };
		
    thread.start();

        方式4:用Runnable接口的匿名内部类

Runnable runnable = new Runnable() {
			
    @Override
    public void run() {
        System.out.println("接口实现类的方法");
    }
};
Thread thread2 = new Thread(runnable); 
thread2.start();

    线程名称的获取

    在一般的线程中,名称可以通过get方法获取。但是主线程无法通过此方法获取,所以获取名称一般使用:

    Thread.currentThread();方法,此方法可以获取当前正在执行的线程。

    注意:由于Thread类中的set/get方法是由final修饰的,当想给Thread子类添加成员变量时,需注意提供set/get方法时,需要改名。


    创建了一个线程,相当于CPU开辟了一个独立的执行路径。相当于开辟了一个独立的方法栈来专门运行子线程中的方法。

    线程在内存中的表现图:



    线程状态(6种)

    


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值