JAVA学习笔记(三十九)- 线程优先级

线程优先级

/*
 * 线程优先级,范围[1,10]
 * 不同优先级的线程获取执行的机会不同,优先级越高,执行机会越大
 *
 * 对比不同优先级的线程被执行的机率
 */
public class Test05 {
    public static void main(String[] args) {
        System.out.println("最大优先级:" + Thread.MAX_PRIORITY);
        System.out.println("最小优先级:" + Thread.MIN_PRIORITY);
        System.out.println("中等优先级:" + Thread.NORM_PRIORITY);
        System.out.println("主线程默认优先级:" + Thread.currentThread().getPriority());
        System.out.println("***********************\n");

        MyThread3 t1=new MyThread3();
        t1.setPriority(10);
        t1.start();
        MyThread4 t2=new MyThread4(3);
        t2.start();

        while (true) {
            System.out.println(Thread.currentThread().getName() + ",优先级:"
                    + Thread.currentThread().getPriority());
        }
    }
}

class MyThread3 extends Thread {

    @Override
    public void run() {
        while (true) {
            System.out.println(Thread.currentThread().getName() + ",优先级:"
                    + getPriority());
        }
    }
}

class MyThread4 extends Thread {
    public MyThread4(int priority) {
        setPriority(priority);
    }

    @Override
    public void run() {
        while (true) {
            System.out.println(Thread.currentThread().getName() + ",优先级:"
                    + getPriority());
        }
    }
}

sleep()和yield()

import java.text.SimpleDateFormat;
import java.util.Date;

/*
 * sleep()和yield()
 */
public class Test06 {
    public static void main(String[] args) {
        /*MyThread5 mt = new MyThread5(250);
        Thread thread = new Thread(mt, "first");
        thread.start();*/

        MyThread6 mt = new MyThread6();
        Thread thread = new Thread(mt, "second");
        thread.start();

        while(true){
            Thread.yield();
            System.out.println(Thread.currentThread().getName()+"****");
        }
    }
}

class MyThread5 implements Runnable {
    private int num;

    public MyThread5(int num) {
        this.num = num;
    }

    @Override
    public void run() {
        while (num > 0) {
            try {
                Thread.sleep(8000);//sleep使线程从执行状态进入休眠状态
                System.out.println(Thread.currentThread().getName() + "****"
                        + num--);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

class MyThread6 implements  Runnable{

    @Override
    public void run() {
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        while(true){
            //yield方法使线程从执行状态进入准备就绪状态
            Thread.yield();
            System.out.println(Thread.currentThread().getName()+",当前时间:"+sdf.format(new Date()));
        }
    }

}

join()方法

/*
 * join()方法
 */
public class Test07 {
    public static void main(String[] args) {
        MyThread7 mt = new MyThread7();
        Thread t1 = new Thread(mt, "first");
        Thread t2 = new Thread(mt, "second");
        t1.start();
        t2.start();

        //当线程二执行完以后再执行主线程
        try {
            System.out.println("t2 is alive?"+t2.isAlive());
            t2.join();
            System.out.println("t2 is alive?"+t2.isAlive());
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        for (int i = 1; i <= 100; i++) {
            System.out.println(Thread.currentThread().getName() + "****" + i);
        }
    }
}

class MyThread7 implements Runnable {

    @Override
    public void run() {
        for (int i = 1; i <= 100; i++) {
            System.out.println(Thread.currentThread().getName() + "****" + i);
        }
    }
}
时间: 2024-07-28 21:41:41

JAVA学习笔记(三十九)- 线程优先级的相关文章

JAVA学习笔记(三十八)- 创建实现Runnable接口的线程

创建实现Runnable接口的线程 /* * 创建线程方式二:实现Runnable接口 * 步骤: * 1.创建一个Runnable接口的实现类 * 2.实现run方法 * 3.创建一个实现类的实例 * 4.创建Thread实例,将实现类的实例作为参数传入 * 5.调用start方法,启动线程并运行run方法 */ class MyDemo implements Runnable{ @Override public void run() { for (int i = 1; i <= 50; i+

JAVA学习第三十九课(常用对象API)- 集合框架(七)— Map集合及其子类对象

一.Map集合常见子类 HashTable:内部结构是哈希表,同步,此实现提供所有可选的映射操作,不允许使用 null 值和 null 键 (HashTable下有子类Properties,使用频率非常高,用来存储键值对型的配置文件信息和IO技术相结合) HashMap:内部结构是哈希表,不同步,此实现提供所有可选的映射操作,并允许使用 null 值和 null 键. TreeMap:内部结构是二叉树,不同步,可以对Map集合中的键进行排序. 二.HashMap演示 import java.ut

JAVA学习笔记(四十九)- Swing相关组件

JFrame组件 import java.awt.Color; import javax.swing.JFrame; import javax.swing.JPanel; /* * Swing是在AWT基础上的扩展 * javax.swing包及其扩展包,组件的命名多以J开关 * * JFrame组件 */ public class Test08 { public static void main(String[] args) { JFrame frame=new JFrame("我的窗体&qu

JAVA学习笔记(三十二)- 字符流 FileReader &amp; FileWriter

标题 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream;

JAVA学习笔记(三十五)- 随机读写文件 RandomAccessFile

RandomAccessFile类 /* * RandomAccessFile类,随机读写文件 * * 数据分段要有规律,每段大小相等,可以将每段数据设置为较大的值,足以存在每一个段的数据 * */ public class Test04 { public static void main(String[] args) throws IOException { //writeFile(); readFile(); } // 写入数据 public static void writeFile()

JAVA学习笔记(三十四)- 字节打印流 PrintStream

PrintStream字节打印流 import java.io.BufferedReader; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintStream; import java.io.PrintWriter; import java.io.Reader; /* * Pri

JAVA学习笔记(五十九)- Socket编程

客户端 import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.UnknownHostException; /* * 客户端 */ public class Client { public static void main(String[] args) throws IOExcep

【Java学习笔记之十九】super在Java继承中的用法小结

1)有人写了个很好的初始化属性的构造函数,而你仅仅想要在其中添加另一些自己新建属性的初始化,这样在一个构造函数中调用另外一个构造函数,可以避免重复的代码量,减少工作量: 2)在一个构造函数中调用另外一个构造函数的时候应该用的是同一块内存空间,在默认的构造函数中先初始化变量,调用另一个的时候覆写已经初始化的变量的值: 3)整个调用的过程和递归调用函数有点类似,不断充气球,直到整个气球膨胀起来,不断的深层递进,遇到停止标记,逐层的跳出来. 写了段代码,解释我上面的叙述: 1 class JavanT

JAVA学习笔记(四十)- 守护线程与中断线程

守护线程 /* * Daemon线程,即守护线程 * 一般都在后台运行,为其他线程提供服务,不能单独存在 */ public class Test08 { public static void main(String[] args) { MyThread8 t1 = new MyThread8("守护线程"); System.out.println("是守护线程吗?"+t1.isDaemon()); t1.setDaemon(true); System.out.pr