今天我们巩固一下前几节所学到的线程
我们希望写一个程序,可以不断的输入,不断的输出
首先我们用以前的方式编写
接下来我们来看一段代码

/*** 不断进行输入一个人的姓名和性别操作,同时进行输出* @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...........王海学----男

线程初步(四)--小练习相关推荐

  1. 第21章 java线程(1)-线程初步

    java线程(1)-线程初步 1.并行和并发 并行和并发是即相似又有区别: 并行:指两个或者多个事件在同一时刻点发生. 并发:指两个或多个事件在同一时间段内发生 在操作系统中,并发性是指在一段事件内宏 ...

  2. java怎样输入五个数字打一成语,Java的线程安全四种方式五个等级[1]

    Java的线程安全四种方式五个等级[1]以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 四种方式 sychronized ...

  3. Java创建并执行线程的四种方法

    Java创建并执行线程的四种方法 java里面创建线程有四种方式: 无返回: 实现Runnable接口,重写run(); 继承Thread类,重写run(); 有返回: 实现Callable接口,重写 ...

  4. C#开启线程的四种方式

    C#开启线程的四种方式 转载于:https://www.cnblogs.com/macT/p/9916425.html

  5. Linux线程(四)

    Linux线程(四) 文章目录 Linux线程(四) 一.线程同步 二.生产者消费者模型 一.线程同步 1.条件变量 当一个线程互斥的访问某个变量时,他可能发现在其他线程改变状态之前,他自己什么都做不 ...

  6. Java高并发入门-线程初步

    Java高并发入门-线程初步 线程与进程之间的关系 进程就是我们运行在计算机上的一个程序,对应Java程序来说就是运行在计算机上的Java应用程序,这个程序在运行的时候就会创建了一个进程,服务器上就会 ...

  7. 多线程之终止线程的四种方法

    终止线程的四种方法 第一种:正常运行结束 第二种:使用退出标志退出线程 第三种:interrupt()方法退出 第四种:stop方法退出 第一种:正常运行结束 这种就是程序正常执行完run方法或者ce ...

  8. java中创建线程的四种方式及线程池详解

    众所周知,我们在创建线程时有四种方法可以用,分别是: 1.继承Thread类创建线程 2.实现Runnable接口创建线程 3.使用Callable和Future创建线程 4.使用线程池创建(使用ja ...

  9. 创建线程的四种方式(Thread、Runnable、线程池、Callable)

    目录 一.直接继承Thread类,然后重写run方法 二.实现Runnable接口 三.线程池创建 四.实现Callable接口 创建线程有四种方式:1.继承Thread类   2.实现Runnabl ...

  10. Java 并发 多线程:创建线程的四种方式

    Java 并发 多线程: 创建线程的四种方式 继承 Thread 类并重写 run 方法 实现 Runnable 接口 实现 Callable 接口 使用线程池的方式创建 1. 通过继承 Thread ...

最新文章

  1. shell脚本详解(二)——条件测试、if语句和case分支语句
  2. 正则表达式 guava_带有正则表达式模式的Google Guava Cache
  3. 广工十四届校赛 count 矩阵快速幂
  4. hadoop发行版本之间的区别
  5. 三坐标测量机(CMM)测头初步了解
  6. 用python完成《商务与经济统计(13版)》课后练习及案例分析——第2章和第3章
  7. 【rmzt】美女杨颖win7主题_8.5
  8. 百度地图获取经纬度的方式
  9. c语言continuo语句例子,现在进行时语法资源Present Continuous Tense(附资源)
  10. 交换友情链接时要谨防以下12种情况
  11. win7去掉桌面快捷方式小箭头
  12. execv bad address
  13. 5V转3V的降压芯片和LDO
  14. Allegro artwork 参数设置
  15. Linux的安装install
  16. 神马笔记 版本2.11.0——歌词笔记
  17. ThinkPhp5源码学习(容器)
  18. 2023最新产品防伪查询系统网站程序源码+带90个证书模板
  19. 触摸屏TP基础学习笔记资料整理
  20. gbq可以算出土建量吗_广联达土建算量

热门文章

  1. “重塑安全边界,揭秘零信任业务保障”,联软科技下一代零信任访问管理系统发布
  2. 简单的flask入门,自己来写网页
  3. wdcp服务器权限修改,Linux下wdcp控制面板安装tipask3.0教程
  4. 【web前端开发】HTML知识点超详细总结
  5. 中国象棋AI实现01
  6. CI第一篇 Jenkins+github fir im 蒲公英pgyer com
  7. 计算机电源选平衡,电脑里选择电源计划哪个好
  8. HTML+JavaScript简单搜索功能实现
  9. SAP PO中如何打印预览,找到Message type以及找到驱动程序和Form输出程序
  10. 品葡萄酒的11个常见问题