线程优先级
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());
}
}
多个线程针对数组同一个位置进行了操作。