Java线程

本文详细介绍了Java线程的概念,包括程序、进程和线程的关系,创建线程的两种方式,线程的状态和分类,多线程同步,以及Lock锁、线程死锁和线程通信。此外,还讨论了新增的创建线程方法,如使用Callable和FutureTask。
摘要由CSDN通过智能技术生成

目录

1. 程序、进程、线程

为什么引入线程的目的?

线程和进程之间的关系

2. 创建线程

1. 继承Thread类创建线程

2. 实现Runnable接口创建线程

3. 线程中常用方法

3. 线程状态

4. 线程的分类

5. 多线程的概念

5.1  Lock(锁)

5.2 线程死锁

5.3 线程通信

 6. 新增创建线程方法


1. 程序、进程、线程

程序:为了完成某种功能,使用计算机编程语言完成任务的一组集合。(指一段静态代码)

进程:指正在执行任务的一组程序,即在计算机操作系统中进行分配资源的基本单位

线程:为了降低时空开销,在操作系统中引入线程,线程是系统调度的基本单位。

为什么引入线程的目的?

进程在OS中的进行创建、撤销、切换等操作的时候时空开销较大,为了减少程序在并发执行时所付出的时空开销,使0S具有更好的并发性,提高系统性能和CPU的利用率。

线程和进程之间的关系

  • 一个进程拥有多个线程,一个线程属于一个进程,线程不能脱离进程单独运行;
  • 进程是计算机OS中进行分配资源的最小单位,而线程是系统调度的基本单位;
  • 在进程中的所用线程可以共享该进程的所拥有的内存资源;
  • 每一个进程都至少包含一个主线程。(java中使用一个主线程进行启动程序)

2. 创建线程

1. 继承Thread类创建线程

Thread 类 用于创建线程,操作线程的类 创建主线程:继承Thread类

public class Demo extends Thread{
    /*
     java 中要在线程中执行的任务,写在run()
     */
    @Override
    public void run(){
        for (int i = 0; i < 500; i++) {
            System.out.println("ThreadDemo1: " + i);
        }
    }
}
public class Test {
    /*
    main 启动java程序的主线程
     */
    public static void main(String[] args) {
        //在主线程中创建线程,并启动线程
        Demo td = new Demo();
        //td.run(); 千万切记调用run() 方法启动线程这只是一个普通方法调用,不是启动线程
        td.start();//启动线程start0(); private native void start0();
        //告诉操作系统开启线程,开始调度
        for (int i = 0; i < 500; i++) {
            System.out.println("main: " + i);
        }
 
     //主线程和Demo1 中的线程交替运行,主要看CPU进行调度
    }
}

2. 实现Runnable接口创建线程

public class MyThread implements Runnable{
 
    @Override
    public void run() {
        for (int i = 0; i < 1000; i++) {
                System.out.println("MyThread: " + i);
        }
    }
}
public class Test {
    public static void main(String[] args) {
        MyThread myth = new MyThread();
        Thread th = new Thread(myth);
        th.start();
    }
}

两种创建线程的比较:

  1. 避免继承的局限,一个类可以继承多个接口。
  2. 适合于资源的共享。
  3. 增加程序的健壮性。

3. 线程中常用方法

  • void start(); 启动线程
  • final void setName(String name) 设置线程的名称
  • final String getName() 返回线程的名称
  • final void setPriority(int newPriority) 设置线程的优先级
  • final int getPriority() 返回线程的优先级
  • final void join() throws InterruptedException 等待线程终止
  • static Thread currentThread() 返回对当前正在执行的线程对象的引用
  • static void sleep(long millis) throws InterruptedException 让当前正在执行的线程休眠(暂停执行), 休眠时间由 millis(毫秒)指定
public class MyThread implements Runnable{
 
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName() + Thread.currentThread().getPriority());
 
        for (int i = 0; i < 10; i++) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值