java线程的实现

java线程的实现

1-线程的概述

​ 电脑中运行的每一个程序都是由一个进程组成,其中每一个进程又是由一个或者多个线程组成,程序运行实际是线程的运行。

2-创建线程的步骤(方法一)
  • 第一步:创建自己的线程类,必须继承Thread类
  • 第二步:重写run()方法,在方法体中写好需要做的事情
  • 第三步:创建线程类的对象
  • 第四步:通过线程类的对象调用start()方法
package advanced.nine;

/**
 * @author Object
 * @description 我的第一个线程类
 * @date 2020/9/13
 */
public class MyThread01 extends Thread{
    @Override
    public void run() {
        for (int i = 0; i < 200; i++) {
            System.out.println("第一个线程 "+i);
        }
    }
}

package advanced.nine;

import java.util.ArrayList;

/**
 * @author Object
 * @description 多线程
 * @date 2020/9/13
 */
public class Demo01 {
    public static void main(String[] args) {
        MyThread01 myT1 = new MyThread01();
        MyThread01 myT3 = new MyThread01();
        MyThread02 myT2 = new MyThread02();

        myT1.start();
        myT2.start();
        myT3.start();

    }
}


3-设置和获取线程名
3.1-设置线程名方法
方法名说明
public void setName(String name)通过set方法设置线程名
public 线程类名(String name)通过构造方法设置线程名
Thread.currentThread().setName(String name);获取当前线程对象,设置线程名,通用方法,可以设置主方法
3.2-获取线程名方法
方法名说明
public String getName()获取线程名
Thread.currentThread().getName(String name);获取当前线程对象,通过当前对象获取线程名
package advanced.nine;

import java.util.ArrayList;

/**
 * @author Object
 * @description 多线程
 * @date 2020/9/13
 */
public class Demo01 {
    public static void main(String[] args) {
        MyThread01 myT1 = new MyThread01();
        //设置线程名方法
        MyThread01 myT3 = new MyThread01("线程2");
        MyThread02 myT2 = new MyThread02();
        //设置线程名方法
        myT1.setName("线程1");
        //获取线程名方法
        System.out.println(myT1.getName());
        myT1.start();
        myT2.start();
        myT3.start();
        //设置线程名方法
        Thread.currentThread().setName("主方法");
        for (int i = 0; i <10 ; i++) {
            //获取线程名方法
            System.out.println(Thread.currentThread().getName()+i);
        }
    }
}

3.3-线程调度
  • 线程调度模型

    • 分时调度模型:所有的线程轮流使用CPU的使用权,平均分配每个线程占用CPU的时间。

    • 抢占调度模型:优先让优先级高的线程调度CPU,如果优先级相同,则随即选择一个线程来执行。注意:优先级高只是

      抢占CPU的机会相对多一些。

  • Tread类中设置和获取线程优先级方法

    方法名说明
    public final int getPriority()获取线程优先级
    public final void setPriority(int num)设置线程优先级
    package advanced.nine.nineone;
    
    /**
     * @author Object
     * @description 我的第一个线程类
     * @date 2020/9/13
     */
    public class MyThread01 extends Thread{
        public MyThread01(String 线程2) {
            super(线程2);
        }
        public MyThread01(){
    
        }
    
        @Override
        public void run() {
            for (int i = 0; i < 10; i++) {
                System.out.println(this.getName()+":"+i);
            }
        }
    }
    //=========================
    package advanced.nine.nineone;
    
    /**
     * @author Object
     * @description 多线程
     * @date 2020/9/13
     */
    public class Demo01 {
        public static void main(String[] args) {
            MyThread01 myT1 = new MyThread01();
            //设置线程名方法
            myT1.setName("线程1");
            //获取线程名优先级,不设置优先级,默认优先级为5
            System.out.println(myT1.getPriority());
            //设置线程优先级,最大优先级是10
            myT1.setPriority(Thread.MAX_PRIORITY);
            //再次获取线程的优先级
            System.out.println(myT1.getPriority());
            Thread.currentThread().setName("主方法");
        }
    }
    
    
    
3.4-线程的生命周期
  • 新建:创建线程对象,通过start()方法进入就绪状态。
  • 就绪:有资格抢占CPU的执行权(需要抢占CPU)
  • 运行:有执行资格,并且有执行权(执行过程中可能会被其它线程抢走CPU的执行权,如果被抢走,则退回到就绪状态,如果遇到sleep等阻塞方法,也会失去执行权,当方法结束后,回到就绪状态)
  • 死亡:线程运行结束,成为垃圾有JVM处理。
4-线程的实现方法(方法二)
  • 第一步:定义自己的线程类 MyRunnable来实现Runnable接口
  • 第二步:在 MyRunnable类中重写run方法
  • 第三步:创建Tread类的对象,把MyRunnable类的对象作为构造方法的参数
  • 第四步:启动线程
package advanced.nine.ninetwo;

import ten.Run;

/**
 * @author Object(object_hui@sina.com)
 * @description Runnable类实现线程示例
 * @date 2020/9/13
 */
public class MyRunnable implements Runnable {
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(Thread.currentThread().getName()+" : "+i);
        }
    }
}
//======================================
package advanced.nine.ninetwo;

/**
 * @author Object(object_hui@sina.com)
 * @description Runnable实现线程测试类
 * @date 2020/9/13
 */
public class Demo03 {
    public static void main(String[] args) {
        //创建实现了Runnable接口的对象
        MyRunnable mr = new MyRunnable();
        //创建线程对象,将接口对象作为参数传进构造方法
        Thread th = new Thread(mr,"郭得刚");
        //启动线程
        th.start();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值