Java中的线程

1、什么是线程和进程

        程序:开发写的代码

        进程:将程序运行起来,一个应用程序(一个进程是一个软件)

        线程:线程是进程中的实际运作的单位,是程序的实际执行者,是最小的执行单位

        

2、线程和进程的关系

        线程是进程中的实际运作的单位

        进程和进程之间堆内存和方法区共享,栈内存独立不共享

        一个进程可以启动多个线程

3、并发、并行、串行

        并发:同一个对象被多个线程同时操作

        并行:多个任务同时进行(必须多核)

        串行:一个接着一个进行,程序处理完当前进程,按顺序处理下一个进程

4、进程的三种状态

        就绪态:当进程获取出CPU外所有的资源后,只要再获得CPU就能执行程序时

        运行态:当进程已获得CPU操作权限,正在运行时

        阻塞态:正在执行的进程,等待某个事件而无法继续运行时被系统剥夺了CPU的操作权限时

5、线程的状态

        新建状态(NEW)

                线程已创建,尚未调用start()方法启动前。
        运行状态(RUNNABLE)

                线程对象被创建后,调用该对象的start()方法,并获取CPU权限进行执行。
        阻塞状态(BLOCKED)

                线程在获取synchronized同步锁失败
        等待状态(WAITING)

                正在等待另一个线程执行特定动作来唤醒该线程的状态
        超时等待状态(TIME_WAITING)

                有明确结束时间的等待状态
        终止状态(TERMINATED)

                线程结束完成后

6、线程的实现方法

(1)继承Thread类

        【1】自定义线程类继承Thread类
        【2】重写run()方法,编写线程执行体
        【3】创建线程对象,调用start()方法启动线程(启动后不一定立即执行,抢到CPU资源才能执行)

// 自定义线程对象
public class MyThread extends Thread {// (1)继承Thread

    public MyThread(String name){//有参构造
        super(name);
    }

    @Override
    public void run() {// (2)重写run()方法
       
        //循环10次
        for (int i = 0; i < 10; i++) {
            System.out.println(Thread.currentThread().getName() + "——" + i);
        }
    }

    public static void main(String[] args) {// main线程,主线程
        
        // 创建线程实现类的对象
        MyThread thread1 = new MyThread("线程1");
        MyThread thread2 = new MyThread("线程2");

        // (3)调用start()方法启动线程
        thread1.start();
        thread2.start();

        for (int i = 0; i < 10; i++) {
            System.out.println("主线程——" + i);
        }
    }
}

(2)实现Runnable接口

        【1】自定义线程类实现Runnable接口
        【2】实现run()方法,编写线程体
        【3】创建线程对象,调用start()方法启动线程(启动后不一定立即执行,抢到CPU资源才能执行)


// 自定义一个线程对象
public class MyRunnable implements Runnable {// (1)实现Runnable接口

    @Override
    public void run() {// (2)重写run()方法

        //循环10次
        for (int i = 0; i < 10; i++) {// 线程执行体
            System.out.println(Thread.currentThread().getName() + "——" + i);
        }
    }

    public static void main(String[] args) {// main线程,主线程

        // 创建实现类对象
        MyRunnable myRunnable = new MyRunnable();

        // 创建代理类对象
        Thread thread1 = new Thread(myRunnable,"线程1");
        Thread thread2 = new Thread(myRunnable,"线程2");

        // (3)调用start()方法启动线程
        thread1.start();
        thread2.start();

        for (int i = 0; i < 10; i++) {
            System.out.println("主线程——" + i);
        }
    }
}

(3)实现callable接口【不常用】

        【1】实现Callable接口
        【2】重写call()方法
        【3】创建目标对象
        【4】创建执行服务
        【5】提交执行
        【6】获取结果
        【7】关闭服务

(4)通过线程池创建

        优势:
                降低资源消耗、提高响应速度、拥有更多的功能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值