多线程 (一)

活动地址:CSDN21天学习挑战赛

目录

基本概念

创建线程的方式一


基本概念


1,概述

1、程序:是为完成特定任务、用某种语言编写的一组指令的集合。即指一 段静态的代码,静态对象。

2、进程:是程序的一次执行过程,或是正在运行的一个程序。

3、线程:进程可进一步细化为线程,是一个程序内部的一条执行路径。

2,多线程的优点

1、提高应用程序的响应。

2、提高计算机系统CPU的利用率。

3、改善程序结构。

**

创建线程的方式一


1,继承thread类

1、创建一个继承于Thread类的子类

2、重写Thread类的run(),将此线程需要执行的操作声明在run()中。

3、创建Thread类的子类对象

4、通过此对象调用start()

2,举例

//1、创建一个继承于Thread类的子类
class MyThread extends Thread{
    //2、重写Thread类的run()
    @Override
    public void run() {
        for (int i = 0; i < 100; i++){
            if (i % 2 == 0 ){
                System.out.println(Thread.currentThread().getName() + ":" +i);
            }
        }
    }
}
public class ThreadTest {
    public static void main(String[] args) {
        //3、创建Thread类的子类对象
        MyThread t1 = new MyThread();
        //4、通过此对象调用start():a、启动当前线程 b、调用当前线程的run()
        t1.start();

        //问题一:我们不能直接调用run()的方式启动线程
//        t1.run();
        //问题二:再启动一个线程,遍历100以内的偶数。
        // 不可以让已经start()的线程去执行。会报IllegalThreadStateException
//        t1.start();
        //我们需要重新创建一个线程对象
        MyThread t2 = new MyThread();
        t2.start();
        //如下操作仍然在main线程中执行
        for (int i = 0; i < 100; i++){
            if (i % 2 == 0 ){
                System.out.println(Thread.currentThread().getName() + ":" +i + "****");
            }
        }
    }

}

3,线程的常用方法

1、start(): 启动线程,并执行对象的run()方法

2、run(): 通常需要重写Thread类中的此方法,将创建的线程要执行的操作声明在此方法中

3、currentThread(): 静态方法,返回执行当前代码的线程

4、getName():获取当前线程的名字

5、setName():设置当前线程的名字

6、yield():释放当前CPU的执行权

7、join():在线程A中调用线程B的join(),此时线程A进入阻塞状态,直到线程B完全执行后,线程A才结束阻塞状态

8、stop():已过时,当执行此方法时,强制结束当前线程

9、sleep(long millitime):让当前线程"睡眠"指定millitime毫秒,在指定时间内,当前线程是阻塞状态

10、isAlive():判断当前线程是否存活

4,线程的优先级

1、默认优先级

MAX_PRIORITY:10
MIN _PRIORITY:1
NORM_PRIORITY:5
2、如何设置当前线程的优先级
getPriority():获取线程优先级
setPriority(int p):设置线程优先级

说明:高优先级线程要抢占低优先级线程cpu的执行权。
高优先级只是高概率下被执行,并不意味着当高优先级执行完以后,低优先级才执行。

4,举例

public class Test {
    public static void main(String[] args) {
        Hello h1 = new Hello("Thread:1");

        //设置分线程的优先级
        h1.setPriority(Thread.MAX_PRIORITY);
        h1.start();

        //给主线程命名
        Thread.currentThread().setName("主线程");
        Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
        for (int i = 0; i < 100; i++){
            if (i % 2 == 0){
                System.out.println(Thread.currentThread().getName() + ":" + Thread.currentThread().getPriority() + ":" + i);
            }
        //判断线程h1是否存活
       System.out.println(h1.isAlive());
    }
}
class Hello extends  Thread{
    @Override
    public void run() {
        for (int i = 0; i < 100; i++){
            if (i % 2 == 0){
                System.out.println(Thread.currentThread().getName() + ":" + Thread.currentThread().getPriority() + ":" + i);
        }
    }
    public Hello(String name){//通过构造器命名
        super(name);
    }
}

提醒:在发布作品前请把不用的内容删掉(活动地址请保留)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值