博客
关于我
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/

你可能感兴趣的文章
python 倒计时 9,8,7,。。。。。。0
查看>>
Python 入门开发学习笔记之数据的增删改查
查看>>
Python 入门教程(2)搭建环境 2.4、VSCode配置Node.js运行环境
查看>>
Python 内存管理
查看>>
Python 内嵌函数:它们有什么用处?
查看>>
python 利用pyttsx3文字转语音
查看>>
Python 基础语法:基本数据类型(一)
查看>>
Python 基础语法:基本数据类型(字典)
查看>>
Python 基础语法:基本数据类型(集合)
查看>>
python 堆排序
查看>>
python 复习计划
查看>>
Python 多处理 apply_async 永远不会在 Windows 7 上返回结果
查看>>
Python 多处理 Numpy 随机
查看>>
Python 多处理 >= 125 列表永远不会完成
查看>>
Python 多处理:在第一个子错误时中止映射
查看>>
Python 多处理不断产生 pythonw.exe 进程而不做任何实际工作
查看>>
Python 多处理从不加入
查看>>
Python 多处理如何优雅地退出?
查看>>
Python 多处理将子进程的标准输出重定向到 Tkinter 文本
查看>>
Python 多处理库错误(AttributeError:__exit__)
查看>>