文章目录

    • static可以让他们共享,volatile可以让他们一个更新,其他强制更新(但不知道为啥我最开始都没加也过了,,,,离谱)
    • static不是不可以变,是可以作为同一个用,可以直接用类引用
    • 用tread继承创建,然后封装进去也可以共享
    • 用的锁,锁了个方法
    • random的三种方法,我用的第二种
    • 我是想给变量同步更新,或是给取票(同一个存票地方)方法上锁,都试试?
  • 共享变量法:应该是成功了,只是可能顺序不太好(本来也是同步卖票嘛),但没重
  • 锁写法,用的reentrantLock.unlock(),事实上完成了,但因为没有同步更新导致,显示出来的数是重复的

1(题目编号7179)、利用多线程技术编写一个模拟龟兔赛跑的程序,要求如下:(1)乌龟每次跑一个单位,兔子每次跑10个单位;(2)每个线程运行时,判断是否达到终点,如果到达终点,给出提示信息,未到终点则提示目前距离终点的距离,并判断是否领先;(3)如果兔子领先,则显示“我跑得快,睡一觉”信息,并睡一会。

static可以让他们共享,volatile可以让他们一个更新,其他强制更新(但不知道为啥我最开始都没加也过了,,,,离谱)
static不是不可以变,是可以作为同一个用,可以直接用类引用
用tread继承创建,然后封装进去也可以共享
public class Main {public static void main(String[] args) {Pao pao1=new Pao();Thread thread=new Thread(pao1,"Wugui");Thread thread1=new Thread(pao1,"Tuzi");thread.start();thread1.start();}
}
class Pao implements Runnable{int N=100;volatile static int wugui=0;这个可以让他们都刷新volatile static int tuzi=0;@Overridepublic  void run() {if(Thread.currentThread().getName().equals("Wugui")){for(;wugui<=N;wugui+=1){System.out.println("Wugui "+(N-wugui)+" left");}System.out.println("Wugui到达****************");}if(Thread.currentThread().getName().equals("Tuzi")){for(;tuzi<=N;tuzi+=10){System.out.println("Tuzi "+(N-tuzi)+" left");if(tuzi>wugui){System.out.println("Tuzi sleep for 100ms-------"+"wugui: "+wugui+" tuzi: "+tuzi);try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}}}System.out.println("TUzi到达**************************");}}
}

2(题目编号8690)、编写多线程应用程序,模拟多人过独木桥的模拟。独木桥每次只能通过一个人,每个人通过木桥的时间为5秒,随机生成10个人,同时准备过此独木桥,显示一下每次通过独木桥人的姓名。需要用到随机数。

用的锁,锁了个方法
random的三种方法,我用的第二种
import javax.sound.midi.Soundbank;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class Main {public static void main(String[] args) {GuoQiao guoQiao=new GuoQiao();List list=new ArrayList<Thread>();list.add(new Thread(guoQiao,"1号"));list.add(new Thread(guoQiao,"2号"));list.add(new Thread(guoQiao,"3号"));list.add(new Thread(guoQiao,"4号"));list.add(new Thread(guoQiao,"5号"));list.add(new Thread(guoQiao,"6号"));list.add(new Thread(guoQiao,"7号"));list.add(new Thread(guoQiao,"8号"));list.add(new Thread(guoQiao,"9号"));list.add(new Thread(guoQiao,"10号"));/* for (int i=0;i<100;i++){System.out.println(Math.random());}*/int[] mark=new int[10];/mark 初值for(int i=0;i<10;i++){mark[i]=0;}int judge=0;while (true){if(judge==10){break;}int pointer=(int)( Math.random()*10)+0;//System.out.println(pointer);if(mark[pointer]==0) {Thread thread= (Thread) list.get(pointer);thread.start();mark[pointer]=1;judge++;}}}
}
class GuoQiao implements Runnable{private  static int time=0;synchronized void guoqiao(){for(int i=0;i<5;i++){time+=1;try {Thread.currentThread().sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName()+"正在过桥,现在是第"+time+"秒");}}@Overridepublic void run() {guoqiao();}
}


3(题目编号7180)、哈尔滨火车站下面有三个火车票代售点:哈站、哈东站、哈西站,假如哈尔滨到北京的火车票总共是200张,如何用程序来实现三个售票点同时卖票的功能。注意:考虑线程同步问题,避免出现重复卖票问题。需要考虑同步问题。

我是想给变量同步更新,或是给取票(同一个存票地方)方法上锁,都试试?

共享变量法:应该是成功了,只是可能顺序不太好(本来也是同步卖票嘛),但没重

public class Main {public static void main(String[] args) {ChuangKouXiLie1 chuangKouXiLie1=new ChuangKouXiLie1();Thread thread1=new Thread(chuangKouXiLie1,"哈站");Thread thread2=new Thread(chuangKouXiLie1,"哈东站");Thread thread3=new Thread(chuangKouXiLie1,"哈西站");thread1.start();thread2.start();thread3.start();}
}
class ChuangKouXiLie1 implements Runnable{volatile public static int piao=200;@Overridepublic void run() {while (piao!=0) {piao--;System.out.println(Thread.currentThread().getName()+" 卖出,剩余票量:"+piao);}}
}



锁写法,用的reentrantLock.unlock(),事实上完成了,但因为没有同步更新导致,显示出来的数是重复的

import java.util.concurrent.locks.ReentrantLock;public class Main {public static void main(String[] args) {ChuangKouXiLie1 chuangKouXiLie1=new ChuangKouXiLie1();Thread thread1=new Thread(chuangKouXiLie1,"哈站");Thread thread2=new Thread(chuangKouXiLie1,"哈东站");Thread thread3=new Thread(chuangKouXiLie1,"哈西站");thread1.start();thread2.start();thread3.start();}
}
class ChuangKouXiLie1 implements Runnable{public static int piao=200;@Overridepublic void run() {ReentrantLock reentrantLock=new ReentrantLock();reentrantLock.lock();while (piao!=0) {piao--;System.out.println(Thread.currentThread().getName()+" 卖出,剩余票量:"+piao);}reentrantLock.unlock();}
}

java实验7线程2020.5.28相关推荐

  1. 南邮java实验_南邮JAVA程序设计实验4 线程程序设计(指针式时钟)

    南邮JAVA程序设计实验4  线程程序设计(指针式时钟) 实验目的: 本实验旨在通过实验,培养学生将JAVA 线程的相关知识点(包括线程调度,线程同步等)有机结合并加以综合应用,在实验中设计多线程程序 ...

  2. java实验四 集合与函数式编程实验

    (2020.4.28版) desktop/javacode/javatesthomework4 5.12版 改了StudentServiceImpl 为stream方式 5.19 优化removeif ...

  3. 车站检查危险品 JAVA,第八周Java实验报告六

    Java实验报告 实验四类的继承 一.实验目的 (1)       理解异常的基本概念: (2)       掌握异常处理方法及熟悉常见异常的捕获方法. 二.实验要求 (1)       练习捕获异常 ...

  4. Java并发编程——线程池的使用

    在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统 ...

  5. Java多线程:线程属性

    # 线程属性 id: 线程唯一标识.自动生成.不允许修改. name: 线程的名字,可以自定义成有具体含义的名字,便于识别不同作用的线程.(可同名) isDaemon: 是否是守护线程. true=守 ...

  6. 四十七、面试前,必须搞懂Java中的线程池ThreadPoolExecutor(上篇)

    @Author:Runsen @Date:2020/6/9 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...

  7. 不允许使用java方式启动_细品 Java 中启动线程的正确和错误方式

    细品 Java 中启动线程的正确和错误方式 前文回顾详细分析 Java 中实现多线程的方法有几种?(从本质上出发) start 方法和 run 方法的比较 代码演示:/** * * start() 和 ...

  8. java实验10流_实验9 Java输入输出流

    <实验9 Java输入输出流>由会员分享,可在线阅读,更多相关<实验9 Java输入输出流(14页珍藏版)>请在金锄头文库上搜索. 1.山 西 大 学 计 算 机 与 信 息 ...

  9. java new一个线程执行完后会自动销毁吗_Java基础总结,超级全的面试题

    1. static关键字是什么意思?Java 中是否可以覆盖(override)一个 private 或者是 static 的方法?是否可以在 static 环境中访问非static 变量? stat ...

最新文章

  1. linux 定时任务 crontab服务 启动 停止 重启
  2. 黑科技教你一招如何解除 生活中烦人的验证码问题
  3. [BZOJ]1503: [NOI2004]郁闷的出纳员
  4. MyBatis创建SqlSession-有没有更好的拿到SqlSessionTemplate 的方法?
  5. 自己抽取的柱状图MpAndroidChart
  6. 《看聊天记录都学不会C语言?太菜了吧》(14)这么神奇?我写了20行代码竟然一行就可以搞定?
  7. JAVA编程心得-Eclipse/MyEclipse 中文乱码解决办法
  8. Qt界面设计器中的界面预览与程序运行时界面不一样
  9. 微信小程序wx.showToast
  10. .NET 中的序列化
  11. iOS 腾讯云IM UIKit 升级XCode11后, 调用语音(取消) 崩溃问题
  12. 最新可用双端美化版在线音乐播放器网站源码
  13. 买社保有哪些好处?社保好还是商业保险好?社保和商业保险的区别?
  14. 支付宝即时到账之给二维码设置超时失效时间
  15. 前端学习之路坑一:json对象和JS对象
  16. 新加坡网络安全软件公司【Republic Power 】申请纳斯达克IPO上市
  17. Vmwareworkstation 15 虚拟机安装显示cpu不支持
  18. 微信发的图片怎么样在服务器中删除了,朋友圈的图片怎么删除掉
  19. Java面试题整理(带答案)
  20. React的高阶组件(HOC)的构建与应用

热门文章

  1. pyenv 让 python 版本完美切换
  2. 实现一个简单的代码字计数器(二)
  3. Redis Desktop Manager 利用ssh连接 Redis
  4. svn clean up 出错解决方案
  5. 推理集 —— 思维的误区
  6. ASP.NET获取客户端、服务器端基础信息集合
  7. [IE技巧] 如何禁止用户关闭IE浏览器
  8. php mysql三_PHP和MySQL基础教程(三)
  9. gets函数会读取回车吗_会做二次函数吗?用6种方法教你做二次函数(初中生不要错过)...
  10. php openssl des ecb,PHP7 OpenSSL DES-EDE-CBC加解密