多线程学习笔记2

来源:互联网 发布:互联网金融数据分析师 编辑:程序博客网 时间:2024/06/05 22:45

线程的调度和优先级问题

  1. A:线程的调度
    a:分时调度
    b:抢占式调度 (Java采用的是该调度方式)
  2. B:获取和设置线程优先级
    a:默认是5
    b:范围是1-10
public class ThreadPriority extends Thread {    @Override    public void run() {        for (int x = 0; x < 100; x++) {            System.out.println(getName() + ":" + x);        }    }public static void main(String[] args) {        ThreadPriority tp1 = new ThreadPriority();        ThreadPriority tp2 = new ThreadPriority();        ThreadPriority tp3 = new ThreadPriority();        tp1.setName("东方不败");        tp2.setName("岳不群");        tp3.setName("林平之");        // 获取默认优先级        // System.out.println(tp1.getPriority());        // System.out.println(tp2.getPriority());        // System.out.println(tp3.getPriority());        // 设置线程优先级        // tp1.setPriority(100000);        //设置正确的线程优先级        tp1.setPriority(10);        tp2.setPriority(1);        tp1.start();        tp2.start();        tp3.start();    }    }

线程的控制(常见方法)

  • A:休眠线程
public class ThreadSleep extends Thread {    @Override    public void run() {        for (int x = 0; x < 100; x++) {            System.out.println(getName() + ":" + x + ",日期:" + new Date());            // 睡眠            // 困了,我稍微休息1秒钟            try {                Thread.sleep(1000);            } catch (InterruptedException e) {                e.printStackTrace();            }        }    }}
/* * 线程休眠 *      public static void sleep(long millis) */public class ThreadSleepDemo {    public static void main(String[] args) {        ThreadSleep ts1 = new ThreadSleep();        ThreadSleep ts2 = new ThreadSleep();        ThreadSleep ts3 = new ThreadSleep();        ts1.setName("林青霞");        ts2.setName("林志玲");        ts3.setName("林志颖");        ts1.start();        ts2.start();        ts3.start();    }}
  • B:加入线程
    当前线程暂停, 等待指定的线程执行结束后, 当前线程再继续
public class ThreadJoin extends Thread {    @Override    public void run() {        for (int x = 0; x < 100; x++) {            System.out.println(getName() + ":" + x);        }    }}
public class ThreadJoinDemo {    public static void main(String[] args) {        ThreadJoin tj1 = new ThreadJoin();        ThreadJoin tj2 = new ThreadJoin();        ThreadJoin tj3 = new ThreadJoin();        tj1.setName("李渊");        tj2.setName("李世民");        tj3.setName("李元霸");        tj1.start();        try {            tj1.join();        } catch (InterruptedException e) {            e.printStackTrace();        }        tj2.start();        tj3.start();    }}
  • C:礼让线程
    yield让出cpu
public class ThreadYield extends Thread {    @Override    public void run() {        for (int x = 0; x < 100; x++) {            System.out.println(getName() + ":" + x);            Thread.yield();        }    }}
public class ThreadYieldDemo {    public static void main(String[] args) {        ThreadYield ty1 = new ThreadYield();        ThreadYield ty2 = new ThreadYield();        ty1.setName("林青霞");        ty2.setName("刘意");        ty1.start();        ty2.start();    }}
  • D:后台线程
    设置一个线程为守护线程, 该线程不会单独执行, 当其他非守护线程都执行结束后, 自动退出
public class ThreadDaemon extends Thread {    @Override    public void run() {        for (int x = 0; x < 100; x++) {            System.out.println(getName() + ":" + x);        }    }}
public class ThreadDaemonDemo {    public static void main(String[] args) {        ThreadDaemon td1 = new ThreadDaemon();        ThreadDaemon td2 = new ThreadDaemon();        td1.setName("关羽");        td2.setName("张飞");        // 设置收获线程        td1.setDaemon(true);        td2.setDaemon(true);        td1.start();        td2.start();        Thread.currentThread().setName("刘备");        for (int x = 0; x < 5; x++) {            System.out.println(Thread.currentThread().getName() + ":" + x);        }    }}
  • E:终止线程(掌握)
public class ThreadStop extends Thread {    @Override    public void run() {        System.out.println("开始执行:" + new Date());        // 我要休息10秒钟,亲,不要打扰我哦        try {            Thread.sleep(10000);        } catch (InterruptedException e) {            // e.printStackTrace();            System.out.println("线程被终止了");        }        System.out.println("结束执行:" + new Date());    }}
public class ThreadStopDemo {    public static void main(String[] args) {        ThreadStop ts = new ThreadStop();        ts.start();        // 你超过三秒不醒过来,我就干死你        try {            Thread.sleep(3000);            // ts.stop();            ts.interrupt();        } catch (InterruptedException e) {            e.printStackTrace();        }    }}
0 0
原创粉丝点击