java_基础_线程

一、概述

1、一个程序就是一个进程,进程中可以包括多个线程,每一个线程都相当于一个小的进程,并且各个线程之间可以同时运行,这就是java多线程编程。
2、线程的五个状态

①新建(new) 用new语句创建的线程对处于新建状态,此时它和其它Java对象一样,仅仅在Heap中被分配了内存。当一个线程处于新建状态时,它仅仅是一个空的线程对象,系统不为它分配资源。
②就绪(Runnable) 程序通过线程对象调用启动方法start()后,系统会为这个线程分配它运行时所需的除处理器之外的所有系统资源。这时,它处在随时可以运行的状态,在随后的任意时刻,只要它获得处理器即会进入运行状态。
③.运行(Running) 处于这个状态的线程占用CPU,执行程序代码。在并发环境中,如果计算机只有一个CPU,那么任何时刻只会有一个线程处于这个状态。如果计算机中有多个CPU,那么同一时刻可以让几个线程占用不同的CPU,使它们都处于运行状态,只有处于就绪状态的线程才有机会转到运行状态。
④阻塞(Blocked) 阻塞状态是指线程因为某些原因放弃CPU,暂时停止运行。当线程处于阻塞状态时,Java虚拟机不会给线程分配CPU,直到线程重新进入就绪状态,它才有机会转到运行状态。
⑤死亡(Dead) 当线程退出run()时,就进入死亡状态,该线程结束生命周期。线程有可能是正常执行完run()方法而退出,也有可能是遇到异常而退出。不管线程是正常结束还是异常结束,都不会对其他线程造成影响。

二、实现线程的方法

方法一:通过继承Thread类,重载父类中的run函数
代码:

public class Demo1 {

    public static void main(String[] args) {
        Cat cat=new Cat();
        cat.start();//启动线程
    }
}
class Cat extends Thread{
    public void run(){
        int times=0;
        while(true){
            try {
                Thread.sleep(1000);//令线程休眠,进入阻塞状态
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("hello world");
            times++;
            if(times>=10) break;
        }
    }
}

方法二:通过继承Runnable接口的,重写run函数实现
代码:

public class Demo2 {
    public static void main(String[] args) {
        Dog dog1=new Dog();
        Thread t=new Thread(dog1);
        t.start();
    }
}
class Dog implements Runnable{

    public void run() {
        int times=0;
        while(true){
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("hello world");
            times++;
            if(times>=10) break;
    }

}
}

法一与法二的区别:
①成为Thread的子类可直接创建一个对象,通过调用该对象中的start函数来启动线程,但由于java的继承机制允许集成一个类,所以不提倡使用该方法
②实现Runnable接口来创建一个线程,在启动线程的时候需要新建一个Thread类,调用该类的start函数进而启动该线程。

注:启动线程时调用的是start函数而不是run函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值