1、线程一
1 package com.cn.donleo.thread.priority;
2
3 import java.util.concurrent.Callable;
4
5 /**
6 * @author liangd
7 * date 2020-10-31 15:25
8 * code
9 */
10 public class MyThreadOne extends Thread {
11
12 MyThreadOne(String name) {
13 super(name);
14 }
15
16 @Override
17 public void run() {
18 for (int i = 0; i < 20; i++) {
19 System.out.println("第" + i + "个 MyThread: " + getName());
20 }
21 System.out.println("线程1的优先级:" + this.getPriority());
22 MyThreadTwo myThreadTwo = new MyThreadTwo();
23 myThreadTwo.start();
24 }
25 }
2、线程二
1 package com.cn.donleo.thread.priority;
2
3 /**
4 * @author liangd
5 * date 2020-10-31 15:20
6 * code
7 */
8 public class MyThreadTwo extends Thread {
9 @Override
10 public void run() {
11 System.out.println("线程2的优先级:"+this.getPriority());
12 }
13 }
3、线程三
1 package com.cn.donleo.thread.priority;
2
3
4 /**
5 * @author liangd
6 * date 2020-10-31 17:01
7 * code
8 */
9 public class MyThreadThree extends Thread {
10
11 MyThreadThree(String name) {
12 super(name);
13 }
14
15 @Override
16 public void run() {
17 //获取系统当前时间
18 Long start = System.currentTimeMillis();
19 StringBuilder stringBuilder = new StringBuilder();
20 //设置时间间隔
21 MyThreadFour.getTime(stringBuilder);
22 Long end = System.currentTimeMillis();
23 System.out.println("线程3执行时间:" + (end - start));
24 }
25 }
4、线程四
1 package com.cn.donleo.thread.priority;
2
3 import java.util.Random;
4
5 /**
6 * @author liangd
7 * date 2020-10-31 17:17
8 * code
9 */
10 public class MyThreadFour extends Thread{
11
12 MyThreadFour(String name) {
13 super(name);
14 }
15
16 @Override
17 public void run() {
18 Long start = System.currentTimeMillis();
19 StringBuilder stringBuilder = new StringBuilder();
20 getTime(stringBuilder);
21 Long end = System.currentTimeMillis();
22 System.out.println("线程4执行时间:" + (end - start));
23 }
24
25 /**
26 * 设置时间间隔
27 * @param stringBuilder
28 */
29 static void getTime(StringBuilder stringBuilder) {
30 for (int i = 0; i < 20; i++) {
31 for (int j = 0; j < 50000; j++) {
32 Random random = new Random();
33 random.nextInt();
34 stringBuilder.append(i);
35 }
36 }
37 }
38 }
5、测试线程优先级
1 package com.cn.donleo.thread.priority;
2
3 /**
4 * @author liangd
5 * date 2020-10-31 16:49
6 * code 线程优先级测试
7 */
8 public class TestPriority {
9 /**
10 * 一、优先级
11 * 1、设置优先级 setPriority(8)
12 * 2、得到优先级 getPriority()
13 * 3、线程是有优先级的,也就是线程的执行顺序
14 * MAX_PRIORITY和MIN_PRIORITY分别是最高级10和最低级1,当然还有默认级别是5;
15 *
16 * 二、线程优先级特性
17 * 1、线程优先级的继承特性:
18 * 也就是如果线程A启动线程B,那么线程A和B的优先级是一样的
19 * 2、线程优先级的规则性:
20 * 即线程会优先级的大小顺序执行,但是不一定是优先级较大的先执行完
21 * 3、线程优先级的随机特性
22 *
23 * @param args
24 */
25 public static void main(String[] args){
26 System.out.println(Thread.currentThread().getPriority());
27 //设置线程优先级,范围0-10,数值越大,优先执行的概率越大
28 Thread.currentThread().setPriority(8);
29 //线程2放在线程1方法里面执行,只需启动线程1
30 // MyThreadOne threadOne = new MyThreadOne("线程1");
31 //设置线程3的优先级,执行速度概率应该比线程1和线程2更快
32 // threadOne.start();
33
34
35 for (int i=0;i<5 ;i++){
36 MyThreadThree threadThree = new MyThreadThree("线程3");
37 threadThree.setPriority(1);
38 threadThree.start();
39 MyThreadFour threadFour = new MyThreadFour("线程4");
40 threadFour.setPriority(10);
41 threadFour.start();
42 }
43
44
45
46 }
47 }