Java多线程

什么是线程

  • 进程的概念:进程是指可执行程序并存放在计算机存储器的一个指令序列,它是一个动态执行的过程。
  • 线程是比进程还要小的运行单位,一个进程包含多个线程
  • 线程可以看做一个子程序

线程的创建

  • 创建一个Thread类,或者一个Thread子类的对象
  • 创建一个实现Runnable接口的类的对象
通过继承Thread类创建线程(MyThread )new MyThread().start()
通过实现Runnable接口创建线程(MyRunnable)new Thread(new MyRunnable()).start()

Thread类

  • Thread是一个线程类,位于java.lang包下
    在这里插入图片描述
  • Thread类的常用方法
    在这里插入图片描述

Runnable接口

  • 只有一个方法run)
  • Runnable是Java中用以实现线程的接口
  • 任何实现线程功能的类都必须实现该接口

通过Thread类创建线程

class MyThread extends Thread{
	public MyThread(String name){
		super(name);
	}
	public void run(){
		for(int i=1;i<=10;i++){
			System.out.println(getName()+"正在运行"+i);
		}
	}
}
public class ThreadTest {

	public static void main(String[] args) {
		MyThread mt1=new MyThread("线程1");
		MyThread mt2=new MyThread("线程2");
		mt1.start();
		mt2.start();
	}

}
//输出多次代码,可以发现线程去获取cpu使用权是随机的

通过Runnable接口创建线程

  • 为什么要实现Runnable接口?
    -Java不支持多继承
    -不打算重写Thread类的其他方法,一般来说我们只需要重写一个run方法就好了,所以实现Runnable接口应用的更广泛一些
class PrintRunnable implements Runnable {
	
	@Override
	public void run() {
		int i = 1;
		while (i <= 10)
			System.out.println(Thread.currentThread().getName() + "正在运行" + (i++));
	}

}

public class Test {

	public static void main(String[] args) {
		PrintRunnable pr = new PrintRunnable();
		Thread t1 = new Thread(pr);
		t1.start();
		PrintRunnable pr1 = new PrintRunnable();
		Thread t2 = new Thread(pr1);
		t2.start();

	}

}

线程的状态

  • 新建(New )
  • 可运行(Runnable )
  • 正在运行(Running )
  • 阻塞(Blocked )
  • 终止(Dead)

线程的生命周期

stop方法现在已经过期了,一般不推荐使用

Sleep方法应用

  • Thread类的方法
  • 作用:在指定的毫秒数内让正在执行的线程休眠(暂停执行)
  • 参数为休眠的时间,单位是毫秒
public static void sleep(long millis)

join方法的应用

  • Thread类的方法
  • 作用:等待调用该方法的线程结束后才能执行
public static void join()
public static void join(long millis)

线程优先级

  • Java为线程类提供了10个优先级
  • 优先级可以用整数1-10表示,超过范围会抛出异常
  • 主线程默认优先级为5
  • 数字越大优先级越高
  • MAX_PRIORITY:线程的最高优先级10
  • MIN_PRIORITY:线程的最低优先级1
  • NORM_PRIORITY:线程的默认优先级5
    在这里插入图片描述

多线程的运行问题

  • 各个线程是通过竞争CPU时间而获得运行机会的
  • 各线程什么时候得到CPU时间,占用多久,是不可预测的
  • 一个正在运行着的线程在什么地方被暂停是不确定的

线程同步

  • synchronized关键字用在
    -成员方法
    -静态方法
    -语句块
public synchronized void saveAccount(){}
public static synchronized void saveAccount(){}
synchronized (obj){.}

线程间的通信

  • wait()方法∶中断方法的执行,使线程等待
  • notify()方法∶唤醒处于等待的某一个线程,使其结束等待
  • notifyAll()方法︰唤醒所有处于等待的线程,使它们结束等待
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值