栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Java

使用Thread多线程的创建

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用Thread多线程的创建

程序:为完成特定的任务,用某种语言编写的一组指令的集合,即一段静态的代码
进程:正在运行的一个程序
线程:一个程序内部的一条执行路径

进程可以细化为多个线程
每个线程都拥有自己独立的:栈和程序计数器
多个线程共享同一个进程的结构:方法区和堆

一个进程中的多个线程共享一份方法区和堆
每个线程都有独立的程序计数器和虚拟机栈
并行:多个cpu同时执行多个任务
并发:一个CPU同时执行多个任务

多线程的创建

方法一:使用Thread
①:创建类来继承Thread
②:重写Thread类中的run()方法—>此线程执行的方法放在run()方法中
③:创建子类对象
④:子类调用start()方法,start()作用:调用此线程;执行此线程的run()方法

创建多线程的方式二:实现Runnable接口

  • 1.创建实现了Runnable接口的类
  • 2.实现Runnable中的唯一一个抽象方法:run()
  • 3.创建实现类的对象
  • 4.将实现类的的对象放到Thread类的构造器中,创建Thread类对象
  • 5.通过Thread类的对象调用strat()方法
测试Thread中的常用方法

1.start():启用当前线程;调用当前线程的run()方法
2.run():通常需要重写Thread中的run()方法,将创建的线程要执行的
操作申明在此方法中
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():判断当前线程是否存活

线程的优先级:

一:
MAX_PRIORITY: 10
MIN_PRIORITY: 1
NORM_PRIORITY: 5 ----->默认优先级
二:如何获取和设置当前的优先级
getPriority():获取
setPriority():设置

高优先级的线程抢占低优先级的CPU执行权,只是从概率上讲,高优先级的线程
高概率的情况下被执行,并不意味着高优先级线程全执行完执行低优先级

*/

public class MyThread extends Thread{
    @Override
    //2.重写Thread类中的run()方法--->将此线程执行的操作放在run()中
    public void run() {
        super.run();
        for(int i = 0 ; i < 100 ; i++){
            if(i % 2 == 0){
                System.out.println(Thread.currentThread().getName()+"t"+  i);
            }
        }
    }


}
class ThreadTest {
    public static void main(String[] args) {
        //3.创建Thread子类对象
        MyThread t1 = new MyThread();
        // 4.通过此对象调用start()
        //start()作用:①:启用当前线程。②:调用当前线程的run()方法

        t1.start();
        //问题一:我们能不能直接调用run()方法启动线程
       // t1.run();
        //问题二:再去启动一个线程,不可继续start(),会报IllegalThreadStateException错误
        //t1.start();
        // 必须重新创建一个线程对象
        MyThread t2 = new MyThread();
        t2.start();




        for (int i = 0; i < 100; i++) {
            if (i % 2 == 0) {
                System.out.println(Thread.currentThread().getName()+ i + "*****main****");
            }
        }
    }
}

比较线程的两种创建方式:
  • 开发中:优先选择 Runnable接口的方式

  • 原因:
    1.实现的方式没有类的单继承的局限性
    2.实现的方式更适合来处理多个线程有共享数据的情况

  • 联系:public class Thread implements Runnable

  • 相同点:两种方式都重写run(),将线程的执行写在run()中,目前两种方式,要想启动线程,都是调用的Thread类中的start()

线程通信:wait(),notify(),notifyAll():此三个方法定义在Object类中。

补充:线程的分类:一种是守护线程,一种是用户线程。

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1039728.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号