java(多线程)

一、多线程概述

先了解进程。
进程:正在进行中的程序(严格讲是一个应用程序启动后在内存中分配的那片空间,比如说启动QQ,)。
线程:进程中的一个执行单元,一个线程中可以有多个线程(至少一个),这个程序就称为多线程程序。
程序启动了多线程,有什么应用?
可以实现多部分程序同时执行,也叫并发执行。

进程其他定义
进程是具有一定功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源调度和分配的一个独立单元。
线程是进程的实体,是cpu调度和分派的基本单位,它是比进程更小的能够独立运行的基本单位。
一个进程可以有多个线程,多个线程也可以并发执行。
多线程的使用可以合理使用cpu资源,但是线程过多会导致性能的降低。
cpu处理程序是通过快速切换完成的,在我们看来好像是随机一样。
之前的程序主线程(main函数入口),遇到循环会停留时间过长。不会马上执行下面的代码。所以采用多线程的方式。

    怎么创建多线程呢?
    多线程创建方式一:1,定义一个类,2,并让它重写run方法。3,创建子类对象(也就是创建线程对象)。4,调用start()方法,启动线程(不是调用run方法)。
    class Demo extends Thread{
        private String name;
        Demo(String name){
            this.name = name;
        }
        public void run(){
            for(int x=1;x<=20;x++){
                System.out.println("name=" +name+"......"+x);
            }
        }
    }
    class ThreadDemo{
        public static void main(String[]args){
            Demo d1 = new Demo("小强");
            Demo d2 = new Demo("旺财");
            d1.start();//注意,不能调用run方法,因为那样还是没有启动线程           
            d2.start();
        }
    }

调用run方法和调用start方法区别?
调用run方法没有开启线程,仅仅是普通的对象调用方法。
调用start方法才是启动了线程,并让jvm调用了run方法在开启的线程中执行。
为什么?
继承Thread类,因为该类描述线程事物,具备线程应有功能。
为什么不直接仅创建thread类的线程对象呢?
可以这样的,没有问题,但是如果这样在调用start方法的时候就试调用的Thread类中的run方法,而这个run方法没有什么事情,更重要的是这个run方法中没有定义我们需要让线程执行的代码。这显然不符合我们的意图。我们创建线程的目的就是为了建立单独的执行路径,让多部分代码同时执行。也就是说要执行我们指定的代码。专业术语叫线程的任务,否则,调用Thread类中的run方法没有意义。所以要复写Thread中的run方法。
主线程的任务在main函数中。
自定义的任务都定义在run方法中,Thread类中的run方法内部的任务并不是我们所需要的。所以解决方案就是重写run方法。
多线程执行时,在栈内存中,其实每一个执行线程都有一片自己的所属的栈内存空间。进行方法的压栈弹栈。
当执行线程的任务结束了,线程自动在栈内存中就释放了。
当所有的线程的执行操作都结束了,那么进程就结束了。

线程对象的名字获取:Thread.currentThread().getName();
主线程:main
自定义线程:Thread-1,-2.....
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值