线程优先级,守护线程

线程优先级

在这里插入图片描述

package com.heal.Thread_test;

public class TestPriority {
    //测试线程的优先级
    public static void main(String[] args) {
        System.out.println(Thread.currentThread().getName()+"--------->"+Thread.currentThread().getPriority());
    MYpriority mYpriority=new MYpriority();


    Thread t1=new Thread(mYpriority);
    Thread t2=new Thread(mYpriority);
    Thread t3=new Thread(mYpriority);
    Thread t4=new Thread(mYpriority);
    Thread t5=new Thread(mYpriority);
    Thread t6=new Thread(mYpriority);

    //设置优先级,再启动
        t1.start();

        t2.setPriority(1);
        t2.start();

        t3.setPriority(4);
        t3.start();

        t4.setPriority(6);
        t4.start();

        t5.setPriority(5);
        t5.start();

        t6.setPriority(10);
        t6.start();
    }
}

class MYpriority implements Runnable{

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+"--------->"+Thread.currentThread().getPriority());
    }
}

线程优先级只是一个权重的问题,并不是完全按照优先级的大小进行的排序。

守护线程

线程分为守护线程和用户线程,守护线程一直存在,例如gc垃圾回收,日志监控等一直存在的,jvm不需要等待这类线程跑完再关机;而我们自己编写的线程为用户线程,当然,我们可以通过调用setDaemon方法可以将线程变成守护线程

package com.heal.Thread_test;

public class TestShouHu {
    public static void main(String[] args) {
        Man man=new Man();
        God god=new God();
        Thread god1=new Thread(god);
        Thread man1=new Thread(man);
//        通过setDaemon方法可以将线程变成守护线程
        god1.setDaemon(true);
        god1.start();
        man1.start();
    }
}
//创建一个man线程,作为我们的守护线程
class Man implements Runnable{

    @Override
    public void run() {
        for (int i = 0; i <= 3650; i++) {
            System.out.println("作为一个人类,你每天都在被守护,第"+i+"天");
        }
        System.out.println("生命终结了");

    }
}
//创建一个God上帝线程,用来守护人类线程
class God implements Runnable{

    @Override
    public void run() {
        while (true){
            System.out.println("上帝保佑着你");
        }

    }
}

可以发现,god1线程没有停止的条件,但是由于通过setDaemon(true)方法,将其变成了守护线程,所以不必完成停止

不安全的数组

package com.heal.Thread_test.syn;

import java.util.ArrayList;
import java.util.List;
//线程不安全的数组,之所以是不安全是因为,多个线程针对数组同一位置进行了操作,导致数组的的长度变短了
public class UnsafeList {
    public static void main(String[] args) {
        List<String> list=new ArrayList<>();
        for (int i = 0; i < 10000; i++) {
            new Thread(()->{
                list.add(Thread.currentThread().getName());
            }).start();
        }
        System.out.println(list.size());
    }
}

多个线程针对数组同一个位置进行了操作。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值