java实验7线程2020.5.28
生活随笔
收集整理的這篇文章主要介紹了
java实验7线程2020.5.28
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- static可以讓他們共享,volatile可以讓他們一個更新,其他強制更新(但不知道為啥我最開始都沒加也過了,,,,離譜)
- static不是不可以變,是可以作為同一個用,可以直接用類引用
- 用tread繼承創(chuàng)建,然后封裝進去也可以共享
- 用的鎖,鎖了個方法
- random的三種方法,我用的第二種
- 我是想給變量同步更新,或是給取票(同一個存票地方)方法上鎖,都試試?
- 共享變量法:應該是成功了,只是可能順序不太好(本來也是同步賣票嘛),但沒重
- 鎖寫法,用的reentrantLock.unlock(),事實上完成了,但因為沒有同步更新導致,顯示出來的數(shù)是重復的
1(題目編號7179)、利用多線程技術(shù)編寫一個模擬龜兔賽跑的程序,要求如下:(1)烏龜每次跑一個單位,兔子每次跑10個單位;(2)每個線程運行時,判斷是否達到終點,如果到達終點,給出提示信息,未到終點則提示目前距離終點的距離,并判斷是否領(lǐng)先;(3)如果兔子領(lǐng)先,則顯示“我跑得快,睡一覺”信息,并睡一會。
static可以讓他們共享,volatile可以讓他們一個更新,其他強制更新(但不知道為啥我最開始都沒加也過了,,,,離譜)
static不是不可以變,是可以作為同一個用,可以直接用類引用
用tread繼承創(chuàng)建,然后封裝進去也可以共享
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個人,同時準備過此獨木橋,顯示一下每次通過獨木橋人的姓名。需要用到隨機數(shù)。
用的鎖,鎖了個方法
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()+"正在過橋,現(xiàn)在是第"+time+"秒");}}@Overridepublic void run() {guoqiao();} }
3(題目編號7180)、哈爾濱火車站下面有三個火車票代售點:哈站、哈東站、哈西站,假如哈爾濱到北京的火車票總共是200張,如何用程序來實現(xiàn)三個售票點同時賣票的功能。注意:考慮線程同步問題,避免出現(xiàn)重復賣票問題。需要考慮同步問題。
我是想給變量同步更新,或是給取票(同一個存票地方)方法上鎖,都試試?
共享變量法:應該是成功了,只是可能順序不太好(本來也是同步賣票嘛),但沒重
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(),事實上完成了,但因為沒有同步更新導致,顯示出來的數(shù)是重復的
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();} }總結(jié)
以上是生活随笔為你收集整理的java实验7线程2020.5.28的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jsp与spring mvc后台cont
- 下一篇: web js基础2