java多线程问题,线程交替执行
两个线程,一个打印1-100的奇数,一个打印1-100的偶数;要求:线程1打印5个之后,线程2开始打印,线程2打印5个之后,线程1再开始打印,以此循环。
package threadtest;public class Test1 {/** 两个线程,一个打印1-100的奇数,一个打印1-100的偶数;要求:线程1打印5个之后,线程2开始打印,线程2打印5个之后,线程1再开始打印,以此循环。*/private static int state = 1;private static int num1 = 1;private static int num2 = 2;public static void main(String[] args) {// TODO Auto-generated method stubfinal Test1 t = new Test1();new Thread(new Runnable(){@Overridepublic void run(){while(num1<100){//两个线程都用t对象作为锁,保证每个交替期间只有一个线程在打印synchronized(t){// 如果state!=1, 说明此时尚未轮到线程1打印, 线程1将调用t的wait()方法, 直到下次被唤醒 if(state!=1){try{t.wait();}catch(InterruptedException e){e.printStackTrace();}}// 当state=1时, 轮到线程1打印5次数字for(int j=0;j<5;j++){System.out.println(num1);num1 +=2;}// 线程1打印完成后, 将state赋值为2, 表示接下来将轮到线程2打印 state = 2; // notifyAll()方法唤醒在t上wait的线程2, 同时线程1将退出同步代码块, 释放t锁 t.notifyAll(); }}}}).start();new Thread(new Runnable(){@Overridepublic void run(){while(num2<100){synchronized(t){if(state!=2){try{t.wait();}catch(InterruptedException e){e.printStackTrace();}}for(int i=0;i<5;i++){System.out.println(num2);num2 +=2;}state=1;t.notifyAll();}} }}).start(); }
}
两个线程交替打印。例如第一个线程打印1,接着第二个线程打印100,接着第一个线程打印2
package threadtest;public class ThreadTest1 extends Thread{/** java多线程问题。两个线程交替打印。例如第一个线程打印1,接着第二个线程打印100,接着第一个线程打印2*/private static int num =0, n = 100;static ThreadTest1 t1, t2;static int i=0;static int x;static String ss = new String();public ThreadTest1(){start();}public void run(){for(x = 0;x<200;x++){synchronized(ss){ss.notify();Print();try{ss.wait();}catch(InterruptedException e){e.printStackTrace();}}}synchronized(ss){ss.notifyAll();}}public void Print(){if(i==0){i++;System.out.println(this.getName()+":"+ ++num);}else{i=(i+1)%2;System.out.println(this.getName()+":" + n++);}}public static void main(String[] args) {// TODO Auto-generated method stubt1 = new ThreadTest1();t2 = new ThreadTest1();}}
java多线程问题,线程交替执行相关推荐
- java两个线程交替执行
比如有一个数,需要两个线程对其交替操作,代码如下 public class ThreadDemo {public static void main(String[] args) {Message me ...
- Java多线程02(线程安全、线程同步、等待唤醒机制)
Java多线程2(线程安全.线程同步.等待唤醒机制.单例设计模式) 1.线程安全 如果有多个线程在同时运行,而这些线程可能会同时运行这段代码.程序每次运行结果和单线程运行的结果是一样的,而且其他的变量 ...
- Java多线程之线程通信之生产者消费者阻塞队列版
Java多线程之线程通信之生产者消费者传统版和阻塞队列版 目录 线程通信之生产者消费者传统版 线程通信之生产者消费者阻塞队列版 1. 线程通信之生产者消费者传统版 题目: 一个初始值为零的变量,两个线 ...
- Java多线程:线程安全和非线程安全的集合对象
转载自 Java多线程:线程安全和非线程安全的集合对象 一.概念: 线程安全:就是当多线程访问时,采用了加锁的机制:即当一个线程访问该类的某个数据时,会对这个数据进行保护,其他线程不能对其访问,直到 ...
- 初学Java多线程:线程简介
Java多线程初学者指南系列教程http://developer.51cto.com/art/200911/162925.htm 初学Java多线程:线程简介 2009-06-29 17:49 ...
- Java多线程编程:交替打印数字1234和字母abcd
Java多线程编程:交替打印数字1234和字母abcd 1. 使用synchronized同步锁 2. 使用LockSupport类 2.1 LockSupport介绍 3. 使用AtomicInte ...
- Java多线程之线程池配置合理线程数
Java多线程之线程池配置合理线程数 目录 代码查看公司服务器或阿里云是几核的 合理线程数配置之CPU密集型 合理线程数配置之IO密集型 1. 代码查看公司服务器或阿里云是几核的 要合理配置线程数首先 ...
- Java多线程之线程池的手写改造和拒绝策略
Java多线程之线程池的手写改造和拒绝策略 目录 自定义线程池的使用 四种拒绝策略代码体现 1. 自定义线程池的使用 自定义线程池(拒绝策略默认AbortPolicy) public class My ...
- Java多线程之线程池7大参数、底层工作原理、拒绝策略详解
Java多线程之线程池7大参数详解 目录 企业面试题 线程池7大参数源码 线程池7大参数详解 底层工作原理详解 线程池的4种拒绝策略理论简介 面试的坑:线程池实际中使用哪一个? 1. 企业面试题 蚂蚁 ...
- Java多线程之线程池详解
Java多线程之线程池详解 目录: 线程池使用及优势 线程池3个常用方式 线程池7大参数深入介绍 线程池底层工作原理 1. 线程池使用及优势 线程池做的工作主要是控制运行的线程的数量,处理过程中将任务 ...
最新文章
- 判断分辨网站是否伪静态的方法
- JS设置cookie、读取cookie、删除cookie
- web前端学习总结--JQuery
- Thymeleaf相关补充
- 选择器Selector
- 滴滴宋世君:DS(数据分析师),究竟是做什么的?
- Linux 打印可变参数日志
- 张志华:机器学习的发展历程及启示
- 【渝粤教育】国家开放大学2019年春季 1117机电控制与可编程序控制 参考试题
- nyist 488 素数环
- 在Linux系统部署docsify工具小记
- Kali Linux 1.0 新手折腾笔记(2013.3.21更新)
- 微信、QQ可正常使用,但浏览器打不开网页解决办法
- 电脑该如何选择(小仙女篇)
- google map学习相关
- fh admin mysql版本_在用mysql-front的时候遇到显示:程序注册时间到期程序将被限制模式下运行。...
- 前端开发实战:实现京东购物平台的静态首页
- 数据库被置疑后的解决方法
- MYSQL详解(5)-索引(一)
- 小程序一个简单的订单界面
热门文章
- 年纪轻轻却突然猝死?数据分析告诉你“猝死”离我们到底有多近?
- 北美互联网公司“隐藏福利”大盘点:看完我彻底酸了...
- 不用下载软件,mac自带丰富快捷键截图Ctrl+shift+4
- 大白菜UEFI版制作u盘启动盘使用教程
- 三套致富战略-教你成为百万富翁
- PHP+MySql获取新添加记录的ID值
- 消息称ARM CEO已辞职 与660亿美元卖身NVIDIA失败无关
- 网易第二季度营收205亿元 同比增长13%超预期
- 投行精英接班后,贵人鸟能否再高飞?
- “万物互联”的时代来了!鸿蒙系统OS 2.0重磅发布:“朋友圈”逐渐扩大