【Java-线程】

目录

什么是线程?

线程的基本概念

线程的创建和启动 

四种创建方式:

线程的状态:


什么是线程?

        在了解线程之前,先了解一下什么是进程。进程:是程序的一次执行过程,是系统运行程序的基本单位。在windows系统中,每一个执行的exe文件或者后台服务都是一个进程。

        线程是CPU的最小执行单元,它可以和属于同一个进程的其他线程共享这个进程的全部资源。

        进程和线程的关系:一个进程可以包含多个线程,但至少会有一个主线程。

例子:当我们在启动JVM运行一个Java程序,其实就启动了一个JVM进程。在JVM进程中又包含main主线程等线程。

面试题:进程和线程的区别?      

1、根本区别
进程和线程的根本区别是进程是操作系统(OS)资源分配的基本单位,而线程是处理器(CPU)任务调度和执行的基本单位。

2、资源开销:
每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。

3、包含关系:
如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线
同完成的;线程是进程的一部分,所行过程不是一条线的,而是多条线(线耗)其被称为轻权进程或者轻量级进程。

4、内存分配:
同一进程的线程共享本进分享截屏空间和资源,而进程之间的地址空间和资源是相互独立的。

5、影响关系:
一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。

6、执行过程:
每个独立的进程有程序运行的入口、顺序执行序列和程序出口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,两者均可并发执行。

线程的基本概念

线程分为:单线程和多线程

  • 单线程:程序只有一个执行线程,按照顺序逐个执行任务。当一个任务执行完毕后,才能执行下一个任务。

  • 多线程:程序可以同时执行多个线程,每个线程可以独立执行任务。多线程可以同时处理多个任务,提高程序的执行效率。

线程的创建和启动 

        线程通过创建Thread实例完成线程的创建,通过调用Thread实例的start()方法启动新线程。

其实从本质来说线程的创建方法只有一种,就是创建Thread实例。但是有不同的实现方式。

四种创建方式:

1.继承Thread类

		public class Test extends Thread{
		    public void run(){
		        for (int i = 1; i <= 26; i++) {
						System.out.println(Thread.currentThread().getName() + ":" + i);
					}
		        }
}

2.实现Runnable接口

		public class Test implement Runnable{
		    public void run(){
		        for (int i = 1; i <= 26; i++) {
						System.out.println(Thread.currentThread().getName() + ":" + i);
					}
		}

3.实现Callable接口

public class Test implements Callable<Integer>{
    privte int begin,end;
    public Test(int begin,int end){
        this.begin=begin;
        this.end=end;
    }

    @Override
    public INteger call() throws Exception{
        int result =0;
        for(int i=begin;i<=end;i++){
            result+=i;
        }
        return result;
       }
    }  

4.线程池

//创建固定大小的线程池
ExExecutorService threadPool = Executors . newFixedThreadPool(10);

while (true) {
//提交多个执行任务至线程池,并执行
threadPool.execute(new Runnable() {
    @Override
    public void run() {
        System. out . println("当前运行的线程名为:"+Thread. currentThread().getName());
        try{
            Thread. sleep( 1000);
           }catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
    });
}

线程的状态:

NEW

新建状态,当前Thread对象虽然有了,但是内核的线程还没有(还没调用 start)

RUNNABLE

就绪状态,正在cpu上运行或随时可以去cpu上运行

TIMED_WAITNG

计时等待状态,有超时时间的等待比如sleep或者join带参数方法

WAITING

等待状态,没有超时时间的等待join/wait

BLOCKED

阻塞状态,因为锁竞争引起的阻塞

TERMINATED

终止状态,当前Thread对象虽然还在,但是内核的线程已经销毁(线程已经结束了)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值