博客
关于我
java基础学习总结——线程(二)
阅读量:357 次
发布时间:2019-03-04

本文共 5084 字,大约阅读时间需要 16 分钟。

?????????????

?????????????????????????setPriority()????????????????NORM_PRIORITY??5???????????t1??????????8??????t2???????????????????

package cn.galc.test;public class TestThread6 {    public static void main(String args[]) {        MyThread4 t4 = new MyThread4();        MyThread5 t5 = new MyThread5();        Thread t1 = new Thread(t4);        Thread t2 = new Thread(t5);        t1.setPriority(Thread.NORM_PRIORITY + 3);        t1.start();        t2.start();        System.out.println("t1????????" + t1.getPriority());    }}class MyThread4 implements Runnable {    public void run() {        for (int i = 0; i <= 1000; i++) {            System.out.println("T1?" + i);        }    }}class MyThread5 implements Runnable {    public void run() {        for (int i = 0; i <= 1000; i++) {            System.out.println("T2?" + i);        }    }}

????????????????????synchronized???????????????????????????????????????????Timer???synchronized??????????????????????????

package cn.galc.test;public class TestSync implements Runnable {    Timer timer = new Timer();    public static void main(String args[]) {        TestSync test = new TestSync();        Thread t1 = new Thread(test);        Thread t2 = new Thread(test);        t1.setName("t1");        t2.setName("t2");        t1.start();        t2.start();    }    public void run() {        timer.add(Thread.currentThread().getName());    }}class Timer {    private static int num = 0;    public void add(String name) {        synchronized (this) {            num++;            try {                Thread.sleep(1);            } catch (InterruptedException e) {                e.printStackTrace();            }            System.out.println(name + "????" + num + "???timer???");        }    }}

????????????????????????????????????????????????????????????????o1?o2??????????????????????

package cn.galc.test;public class TestDeadLock implements Runnable {    public int flag = 1;    static Object o1 = new Object(), o2 = new Object();    public void run() {        System.out.println(Thread.currentThread().getName() + "?flag=" + flag);        if (flag == 1) {            synchronized (o1) {                try {                    Thread.sleep(500);                } catch (InterruptedException e) {                    e.printStackTrace();                }                synchronized (o2) {                    System.out.println("1");                }            }        }        if (flag == 0) {            synchronized (o2) {                try {                    Thread.sleep(500);                } catch (InterruptedException e) {                    e.printStackTrace();                }                synchronized (o1) {                    System.out.println("0");                }            }        }    }    public static void main(String args[]) {        TestDeadLock td1 = new TestDeadLock();        TestDeadLock td2 = new TestDeadLock();        td1.flag = 1;        td2.flag = 0;        Thread t1 = new Thread(td1);        Thread t2 = new Thread(td2);        t1.setName("??td1");        t2.setName("??td2");        t1.start();        t2.start();    }}

??????????????????????????????????????????????

?????????????????????????????????????????????????????????????????????????????synchronized????wait/notify????????????????

package cn.galc.test;public class ProducerConsumer {    public static void main(String args[]) {            SyncStack stack = new SyncStack();            Runnable p = new Producer(stack);            Runnable c = new Consumer(stack);            Thread p1 = new Thread(p);            Thread c1 = new Thread(c);            p1.start();            c1.start();    }}class SyncStack {    private int index = 0;    private char[] data = new char[6];    public synchronized void push(char c) {        if (index == data.length) {            try {                this.wait();            } catch (InterruptedException e) {            }        }        this.notify();        data[index] = c;        index++;    }    public synchronized char pop() {        if (index == 0) {            try {                this.wait();            } catch (InterruptedException e) {            }        }        this.notify();        index--;        return data[index];    }}class Producer implements Runnable {    SyncStack stack;    public Producer(SyncStack s) {        stack = s;    }    public void run() {        for (int i = 0; i < 20; i++) {            char c = (char) (Math.random() * 26 + 'A');            stack.push(c);            System.out.println("produced?" + c);            try {                Thread.sleep((int) (Math.random() * 1000));            } catch (InterruptedException e) {            }        }    }}class Consumer implements Runnable {    SyncStack stack;    public Consumer(SyncStack s) {        stack = s;    }    public void run() {        for (int i = 0; i < 20; i++) {            char c = stack.pop();            System.out.println("???" + c);            try {                Thread.sleep((int) (Math.random() * 1000));            } catch (InterruptedException e) {            }        }    }}

转载地址:http://fckr.baihongyu.com/

你可能感兴趣的文章
NOIp模拟赛二十九
查看>>
Nokia5233手机和我装的几个symbian V5手机软件
查看>>
Non-final field ‘code‘ in enum StateEnum‘
查看>>
none 和 host 网络的适用场景 - 每天5分钟玩转 Docker 容器技术(31)
查看>>
None还可以是函数定义可选参数的一个默认值,设置成默认值时实参在调用该函数时可以不输入与None绑定的元素...
查看>>
NOPI读取Excel
查看>>
NoSQL&MongoDB
查看>>
NoSQL介绍
查看>>
Notepad ++ 安装与配置教程(非常详细)从零基础入门到精通,看完这一篇就够了
查看>>
Notepad++在线和离线安装JSON格式化插件
查看>>
notepad++最详情汇总
查看>>
notepad如何自动对齐_notepad++怎么自动排版
查看>>
Notification 使用详解(很全
查看>>
NotImplementedError: Cannot copy out of meta tensor; no data! Please use torch.nn.Module.to_empty()
查看>>
Now trying to drop the old temporary tablespace, the session hangs.
查看>>
nowcoder—Beauty of Trees
查看>>
np.arange()和np.linspace()绘制logistic回归图像时得到不同的结果?
查看>>
np.power的使用
查看>>
NPM 2FA双重认证的设置方法
查看>>
npm ERR! ERESOLVE could not resolve报错
查看>>