线程初步(四)--小练习
今天我们巩固一下前几节所学到的线程
我们希望写一个程序,可以不断的输入,不断的输出
首先我们用以前的方式编写
接下来我们来看一段代码
/*** 不断进行输入一个人的姓名和性别操作,同时进行输出* @author lover**/
class resourse{int x=1;private String name;private String sex;boolean flag=false;public void chushi(String name,String sex){this.name=name;this.sex=sex;}public synchronized void input(){ if(flag){try {wait();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}else{if(x==1){this.chushi("王海学", "男");}else{this.chushi("邵玥", "小仙女");}x++;x=x%2;flag=true;notifyAll();}}public synchronized void output(){if(!flag){try {wait();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}else{System.out.println(Thread.currentThread().getName()+"..........."+this.name+"----"+this.sex);flag=false;notifyAll();}}
}
class put implements Runnable{resourse r;public put(resourse r){this.r=r;}public void run(){while(true){r.input();}}
}
class out implements Runnable{resourse r;public out(resourse r){ this.r=r;}public void run(){while(true){r.output();}}
}
public class Text {public static void main(String[] args) {resourse r=new resourse();put p=new put(r);out o=new out(r);Thread pp=new Thread(p);Thread oo=new Thread(o);pp.start();oo.start();
}
}
我们来看看输出
Thread-1...........邵玥----小仙女
Thread-1...........王海学----男
Thread-1...........邵玥----小仙女
Thread-1...........王海学----男
Thread-1...........邵玥----小仙女
Thread-1...........王海学----男
Thread-1...........邵玥----小仙女
Thread-1...........王海学----男
Thread-1...........邵玥----小仙女
Thread-1...........王海学----男
Thread-1...........邵玥----小仙女
接下来我们将改写成jdk1.5之后的代码即使用锁
代码如下
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;/*** 不断进行输入一个人的姓名和性别操作,同时进行输出* @author lover**/
class resourse{int x=1;private String name;private String sex;boolean flag=false;private Lock lock=new ReentrantLock();private Condition con=lock.newCondition();public void input(){lock.lock();try{while(flag){try {con.await();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(x==1){this.chushi("王海学", "男");}else{this.chushi("邵玥", "小仙女");}x++;x=x%2;flag=true;con.signal();}finally{lock.unlock();}}public void output(){lock.lock();try{while(!flag){try {con.await();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}System.out.println(Thread.currentThread().getName()+"..........."+this.name+"----"+this.sex);flag=false;con.signal();}finally{lock.unlock();}}public void chushi(String name,String sex){this.name=name;this.sex=sex;}
}
class put implements Runnable{resourse r;public put(resourse r){this.r=r;}public void run(){while(true){r.input();}}
}
class out implements Runnable{resourse r;public out(resourse r){ this.r=r;}public void run(){while(true){r.output();}}
}
public class Text {
public static void main(String[] args) {resourse r=new resourse();put p=new put(r);out o=new out(r);Thread pp=new Thread(p);Thread oo=new Thread(o);pp.start();oo.start();
}
}
输出如下
Thread-1...........邵玥----小仙女
Thread-1...........王海学----男
Thread-1...........邵玥----小仙女
Thread-1...........王海学----男
Thread-1...........邵玥----小仙女
Thread-1...........王海学----男
Thread-1...........邵玥----小仙女
Thread-1...........王海学----男
Thread-1...........邵玥----小仙女
Thread-1...........王海学----男
Thread-1...........邵玥----小仙女
Thread-1...........王海学----男
线程初步(四)--小练习相关推荐
- 第21章 java线程(1)-线程初步
java线程(1)-线程初步 1.并行和并发 并行和并发是即相似又有区别: 并行:指两个或者多个事件在同一时刻点发生. 并发:指两个或多个事件在同一时间段内发生 在操作系统中,并发性是指在一段事件内宏 ...
- java怎样输入五个数字打一成语,Java的线程安全四种方式五个等级[1]
Java的线程安全四种方式五个等级[1]以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 四种方式 sychronized ...
- Java创建并执行线程的四种方法
Java创建并执行线程的四种方法 java里面创建线程有四种方式: 无返回: 实现Runnable接口,重写run(); 继承Thread类,重写run(); 有返回: 实现Callable接口,重写 ...
- C#开启线程的四种方式
C#开启线程的四种方式 转载于:https://www.cnblogs.com/macT/p/9916425.html
- Linux线程(四)
Linux线程(四) 文章目录 Linux线程(四) 一.线程同步 二.生产者消费者模型 一.线程同步 1.条件变量 当一个线程互斥的访问某个变量时,他可能发现在其他线程改变状态之前,他自己什么都做不 ...
- Java高并发入门-线程初步
Java高并发入门-线程初步 线程与进程之间的关系 进程就是我们运行在计算机上的一个程序,对应Java程序来说就是运行在计算机上的Java应用程序,这个程序在运行的时候就会创建了一个进程,服务器上就会 ...
- 多线程之终止线程的四种方法
终止线程的四种方法 第一种:正常运行结束 第二种:使用退出标志退出线程 第三种:interrupt()方法退出 第四种:stop方法退出 第一种:正常运行结束 这种就是程序正常执行完run方法或者ce ...
- java中创建线程的四种方式及线程池详解
众所周知,我们在创建线程时有四种方法可以用,分别是: 1.继承Thread类创建线程 2.实现Runnable接口创建线程 3.使用Callable和Future创建线程 4.使用线程池创建(使用ja ...
- 创建线程的四种方式(Thread、Runnable、线程池、Callable)
目录 一.直接继承Thread类,然后重写run方法 二.实现Runnable接口 三.线程池创建 四.实现Callable接口 创建线程有四种方式:1.继承Thread类 2.实现Runnabl ...
- Java 并发 多线程:创建线程的四种方式
Java 并发 多线程: 创建线程的四种方式 继承 Thread 类并重写 run 方法 实现 Runnable 接口 实现 Callable 接口 使用线程池的方式创建 1. 通过继承 Thread ...
最新文章
- shell脚本详解(二)——条件测试、if语句和case分支语句
- 正则表达式 guava_带有正则表达式模式的Google Guava Cache
- 广工十四届校赛 count 矩阵快速幂
- hadoop发行版本之间的区别
- 三坐标测量机(CMM)测头初步了解
- 用python完成《商务与经济统计(13版)》课后练习及案例分析——第2章和第3章
- 【rmzt】美女杨颖win7主题_8.5
- 百度地图获取经纬度的方式
- c语言continuo语句例子,现在进行时语法资源Present Continuous Tense(附资源)
- 交换友情链接时要谨防以下12种情况
- win7去掉桌面快捷方式小箭头
- execv bad address
- 5V转3V的降压芯片和LDO
- Allegro artwork 参数设置
- Linux的安装install
- 神马笔记 版本2.11.0——歌词笔记
- ThinkPhp5源码学习(容器)
- 2023最新产品防伪查询系统网站程序源码+带90个证书模板
- 触摸屏TP基础学习笔记资料整理
- gbq可以算出土建量吗_广联达土建算量
热门文章
- “重塑安全边界,揭秘零信任业务保障”,联软科技下一代零信任访问管理系统发布
- 简单的flask入门,自己来写网页
- wdcp服务器权限修改,Linux下wdcp控制面板安装tipask3.0教程
- 【web前端开发】HTML知识点超详细总结
- 中国象棋AI实现01
- CI第一篇 Jenkins+github fir im 蒲公英pgyer com
- 计算机电源选平衡,电脑里选择电源计划哪个好
- HTML+JavaScript简单搜索功能实现
- SAP PO中如何打印预览,找到Message type以及找到驱动程序和Form输出程序
- 品葡萄酒的11个常见问题