多线程的自白

进程:
应用程序的执行实例
线程:
CPU调度和分派的基本单位
多线程:
如果在一个进程中同时运行了多个线程,用来完成不同的工作,则称之为“多线程”
多个线程交替占用CPU资源,而非真正的并行执行

Thread类:
Java提供了java.lang.Thread类支持多线程编程
主线程:
main()方法即为主线程入口
产生其他子线程的线程
必须最后完成执行,因为它执行各种关闭动作
public static void main(String args[]) {
Thread t= Thread.currentThread();
System.out.println("当前线程是: "+t.getName());
t.setName(“MyJavaThread”);
System.out.println("当前线程名是: "+t.getName()); }

在Java中创建线程的两种方式:
1继承java.lang.Thread类
2实现java.lang.Runnable接口
步骤:
1.定义线程
2.创建线程对象
3.启动线程
4.终止线程

定义MyThread类继承Thread类
重写run()方法,编写线程执行体
创建线程对象,调用start()方法启动线程
public class MyThread extends Thread{
//重写run()方法
public void run(){
for(int i=1;i<100;i++){ System.out.println(
Thread.currentThread().getName()+":"+i);
}

public static void main(String[] args) {
MyThread thread = new MyThread();
thread.start(); //启动线程
}

实现Runnable接口创建线程
定义MyRunnable类实现Runnable接口
实现run()方法,编写线程执行体
创建线程对象,调用start()方法启动线程

public class MyRunnable implements Runnable{
public void run(){
for(int i=1;i<100;i++){
System.out.println(
Thread.currentThread().getName()+":"+i);
}
}
}

public static void main(String[] args) {
MyRunnable myRunnable = new MyRunnable();
Thread myThread = new Thread(myRunnable);
thread.start(); //启动线程}

两种方式的区别?
1.继承Thread类
编写简单,可直接操作线程
适用于单继承

2.实现Runnable接口
避免单继承局限性
便于共享资源

线程的五种状态:
1.创建 2.就绪 3.运行 4.阻塞 5.死亡
第一是创建状态,在生成线程对象,并没有调用该对象的start方法,该线程处于创建状态。

第二是就绪状态。 当调用该线程的start方法之后,此时线程调用程序还没有把该线程设置为当前线程,该线程就进入就绪状态。在线程运行之后,从等待或者睡眠中回来之后,也会处于就绪状态。

第三是运行状态。线程调度程序将处于就绪状态的线程设置为当前线程,此时线程进入运行状态。开始运行run方法中的代码。

第四是阻塞状态。线程正处于运行状态的时候,被暂停。通常是为了等待某个事件的发生(比如说某项资源就绪)之后在继续运行。通常线程调用sleep、wait等方法都可以导致线程进入阻塞

第五是死亡状态。如果一个线程的run方法执行结束或者调用stop方法后,该线程就会死亡。对于死亡的线程,无法在使用start方法令其进入就绪

线程调度指按照特定机制为多个线程分配CPU的使用权
方法如下:
在这里插入图片描述

线程优先级由1~10表示,1最低,默认优先级为5
优先级高的线程获得CPU资源的概率较大

线程休眠:
让线程暂时睡眠指定时长,线程进入阻塞状态
睡眠时间过后线程会再进入可运行状态
.sleep();

线程的强制运行:
使当前线程暂停执行,等待其他线程结束后再继续执行本线程
方法:
public final void join()
public final void join(long mills)
public final void join(long mills,int nanos)

millis:以毫秒为单位的等待时长
nanos:要等待的附加纳秒时长
需处理InterruptedException异常

线程的礼让:
暂停当前线程,允许其他具有相同优先级的线程获得运行机会
该线程处于就绪状态,不转为阻塞状态
方法:public static void yield()
**注意:**只是提供一种可能,但是不能保证一定会实现礼让

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值