Java多线程交替输出01010......
2017-02-17 16:39
211 查看
1.先简单了解多线程并发,同步和异步的概念
多线程并发时,多个线程同时请求同一个资源,必然导致此资源的数据不安全,A线程修改了B线程的处理的数据,而B线程又修改了A线程处理的数理。显然这是由于全局资源造成的,有时为了解 决此问题,优先考虑使用局部变量,退而求其次使用同步代码块,出于这样的安全考虑就必须牺牲 系统处理性能,加在多线程并发时资源挣夺最激烈的地方,这就实现了线程的同步机制
多线程并发时,多个线程同时请求同一个资源,必然导致此资源的数据不安全,A线程修改了B线程的处理的数据,而B线程又修改了A线程处理的数理。显然这是由于全局资源造成的,有时为了解 决此问题,优先考虑使用局部变量,退而求其次使用同步代码块,出于这样的安全考虑就必须牺牲 系统处理性能,加在多线程并发时资源挣夺最激烈的地方,这就实现了线程的同步机制
同步:A线程要请求某个资源,但是此资源正在被B线程使用中,因为同步机制存在,A线程请求不到,怎么办,A线程只能等待下去
异步:A线程要请求某个资源,但是此资源正在被B线程使用中,因为没有同步机制存在,A线程仍然请求的到,A线程无需等待 显然,同步最最安全,最保险的。而异步不安全,容易导致死锁,这样一个线程死掉就会导致整个进程崩溃,但没有同步机制的存在,性能会有所提升
2.通过代码介绍实现多线程交替输出010101......
/** * 交替输出0101010101010101...... */ public class AlternateOutPutZeroOne implements Runnable{ private boolean flag; private int count; @Override public void run() { while (count < 200){ alternateOutput(); } System.out.println("count="+count); } public synchronized void alternateOutput(){ //检测当前是A线程 if(Thread.currentThread().getName().equals("A")){ try { count ++; if(flag){ //检测到已经输出过0则释放资源等待 wait(); }else { flag = true; System.out.println("AAAAAA0"); } //通知其他线程去激活 notify(); // Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } }else if(Thread.currentThread().getName().equals("B")){ try { count ++; if(!flag){ //检测到已经输出过1则释放资源等待 wait(); }else { flag = false; System.out.println("BBBBBB1"); } //通知其他线程去激活 notify(); // Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }调用方法如下
AlternateOutPutZeroOne run = new AlternateOutPutZeroOne(); Thread a = new Thread(run); a.setName("A"); Thread b = new Thread(run); b.setName("B"); a.start(); b.start();
相关文章推荐
- Java多线程交替输出01010......
- Java多线程交替输出01010......
- Java多线程,交替输出121212
- Java 多线程中。两个线程交替执行,一个输出偶数,一个输出奇数(方法二)
- 面试必问!Java 多线程中两个线程交替执行,一个输出偶数,一个输出奇数
- Java 多线程中。两个线程交替执行,一个输出偶数,一个输出奇数(方法一)
- Java 多线程中。两个线程交替执行,一个输出偶数,一个输出奇数
- java多线程:循环输出ABC
- 一起做面试题--Java多线程交替打印
- java多线程间断输出刨根问底
- java 多线程协作 模拟四台电梯的工作状态并统计每层上下楼人数和输出上下楼日志到文件
- java多线程--给点1,2,A,B四个线程,交叉输出数字和字母
- java多线程问题,线程交替执行
- Java多线程Socket在控制台输出的多人聊天室编程
- Java 多线程 子线程 交替打印 奇偶数
- Java多线程实现同时输出
- Java多线程调试如何完成信息输出处理
- Java多线程调试如何完成信息输出处理
- Java多线程——thread及runnable的基本使用及交替执行
- [Java多线程]ABC三个线程顺序输出的问题