Java基础知识----线程

一、什么是线程

 

线程是计算机系统用来执行任务的最小单位

二、程序、进程、线程

程序:存放在电脑硬盘的指令文件的集合

进程:程序运行时内存中的一块空间,是动态的,一个进程会控制多个任务的进行,且任务时同时进行的

线程:线程是执行任务的最小单位,一个进程可能会执行多个线程

三、线程的好处

线程可以实现多个任务的并行和并发

并行:就是多个任务同时进行

并发:看起来是多个任务在同时进行的,其实在一个时间点上是只有一个任务在运行

使用线程的目的是为了让多个任务同时进行,当cpu在运行多个任务时,是随件给每个任务发放一段时间片,每个任务就在这个时间片的时候运行(时间片就是一段极短的时间),这样看起来就相当于多个任务在同时进行

四、实现线程的方法

1.继承Thread

Thread就是线程

创建一个线程对象

new Thread();

给线程分配任务

执行一个线程就是执行这个线程中的run方法,当一个类继承Thread时需要重写run方法

启动线程

启动线程的方法void start();

代码详解

public class Demo1 {
    public static void main(String[] args) {
        Dog dog = new Dog();//创建一个Dog对象,因为Dog类继承了Thread类,所以就相当于创建了一个Thread对象
        dog.start();//启动线程
    }
}
class Dog extends Thread{
    @Override//重写run方法
    public void run() {
        for (int i = 0; i < 1000; i++) {
            System.out.println("我吃骨头");
        }
    }
}

 2.实现Runnable

此接口表示的是线程任务而不是线程,如果一个类实现了这个接口,则表示创建了一个线程任务,后面还是需要创建Thread线程对象来接受这个线程任务

new Thread(Runnable r):创建线程任务的同时指派任务

自定义实现Runnable

public class Demo2 {
    public static void main(String[] args) {
        Dog2 dog2 = new Dog2();//创建Dog2对象,因为这个对象实现了Runnable接口,则相当于创建了这个类的线程方法
        Thread t1 = new Thread(dog2);//创建一个线程对象
        t1.start();//启动线程
    }
}
class Dog2 implements Runnable{//实现接口
    @Override//重写run方法
    public void run() {
        for (int i = 0; i < 1000; i++) {
            System.out.println("woc");
        }
    }
}

3.实现Callable

实现Callable的方式来创建一个线程的好处是会有一个返回值

使用方式:new Thread(FutureTask的实现类对象)

然后在实现类中重写call方法

自定义实现Callable

public class Demo4 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        Dog3 dog3 = new Dog3();//创建一个Dog3对象
        FutureTask task1 = new FutureTask(dog3);//创建一个FutureTask对象,同时将Dog3对象传进去
        Thread t1 = new Thread(task1);//创建一个Thread线程对象
        t1.start();//启动线程
        System.out.println(task1.get());
    }
}
class Dog3 implements Callable{//实现Callable接口
    @Override//重写call方法
    public Object call() throws Exception {
        for (int i = 0; i < 10000; i++) {
            System.out.println("你好java");
        }
        return 1;
    }
}

三、线程常用方法

1.名称相关方法

new Thread(String name):给当前线程取名

new Thread(Runnable target, String name):创建线程的同时指定线程的名称

String getName():获取线程对象的名称

void setName():给线程对象名称赋值

static Thread currentThread:获取当前线程

public class Demo5 {
    public static void main(String[] args) {
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("我吃什么了:" + Thread.currentThread().getName());
            }
        },"再见了妈妈");
        t1.start();
    }

2.优先级相关方法

int getPriority():获取当前线程的优先级

void setPriority(int i):给当前线程设置优先级

优先级最大值为10

优先级最小值为1

如果不设置优先级,则系统默认优先级为5

public class Demo6 {
    public static void main(String[] args) {
        Thread t1= new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 20000; i++) {
                    System.out.println("你在干什么");
                }
            }
        });
        Thread t2= new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 20000; i++) {
                    System.out.println("我在吃饭呢");
                }
            }
        });
        System.out.println(t1.getPriority());
        System.out.println(t2.getPriority());
        t1.setPriority(Thread.MAX_PRIORITY);//调用Thread中的优先级最大值
        t2.setPriority(Thread.MIN_PRIORITY);//调用Thread中的优先级最小值
        t2.start();
        t1.start();
    }
}

效果演示:

 注意:优先级设置后只是让cpu分给优先级高的任务的时间片的几率高了,并不是一定会先执行完优先级高的任务

其余方法都记录在api文档当中,请自行查看,谢谢

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值