1. 程式人生 > >Java 小程式練習(二)

Java 小程式練習(二)

一、四位隨機驗證碼

package lx2;

import java.util.Random;
public class Demo5 {
	public static void main(String[] args) {

		 char[] arr={'s','b','g','h','過','傻','F','Z'};
		StringBuilder sb=new StringBuilder();
		Random  random=new Random();
		for(int i=0;i<4;i++){
			int index=random.nextInt(arr.length);
			sb.append(arr[index]);
		}
		System.out.println("驗證碼:"+sb);
	} 
	
}
二、模擬QQ視訊與聊天同時在執行。
package lx2;

/*
需求: 模擬QQ視訊與聊天同時在執行。
*/

class TalkThread extends Thread{
	
	@Override
	public void run() {
		while(true){
			System.out.println("hi,你好!開視訊唄...");
		}
	}
}


class VideoThread extends Thread{
	
	@Override
	public void run() {
		while(true){
			System.out.println("視訊視訊....");
		}
	}
}

public class Demo2 {
	
	public static void main(String[] args) {
		TalkThread talkThread = new TalkThread();
		talkThread.start();
		VideoThread videoThread = new VideoThread();
		videoThread.start();	
		
	}
}

三、 需求: 模擬3個視窗同時在售50張 票 。
 
問題1 :為什麼50張票被賣出了150次?

出現 的原因: 因為num是非靜態的,非靜態的成員變數資料是在每個物件中都會維護一份資料的,三個執行緒物件就會有三份。 解決方案:把num票數共享出來給三個執行緒物件使用。使用static修飾。 問題2: 出現了執行緒安全問題 ? 執行緒 安全問題的解決方案:sun提供了執行緒同步機制讓我們解決這類問題的。
 
 java執行緒同步機制的方式:
 
  方式一:同步程式碼塊
   
   同步程式碼塊的格式:
    
    synchronized(鎖物件){
     需要被同步的程式碼...
    } 同步程式碼塊要注意事項:
  1. 任意的一個物件都可以做為鎖物件。
  2. 在同步程式碼塊中呼叫了sleep方法並不是釋放鎖物件的。
  3. 只有真正存線上程安全問題的時候才使用同步程式碼塊,否則會降低效率的。
  4. 多執行緒操作的鎖 物件必須 是唯一共享 的。否則無效。
   需求: 一個銀行賬戶5000塊,兩夫妻一個拿著 存摺,一個拿著卡,開始取錢比賽,每次只能取一千塊,要求不準出現執行緒安全問題。
  
  方式二:同步函式 出現執行緒安全問題的根本原因:
 1. 存在兩個或者兩個以上 的執行緒物件,而且執行緒之間共享著一個資源。
 2. 有多個語句操作了共享資源。
 
package lx2;

class SaleTicket extends Thread{
		
	 static int num = 50;//票數  非靜態的成員變數,非靜態的成員變數資料是在每個物件中都會維護一份資料的。
	 
         static Object o = new Object();
	
	 public SaleTicket(String name) {
		super(name);
	}
	
	@Override
	public void run() {
		while(true){
			//同步程式碼塊
			synchronized ("鎖") {				
				if(num>0){
					System.out.println(Thread.currentThread().getName()+"售出了第"+num+"號票");
					try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					num--;
				}else{
					System.out.println("售罄了..");
					break;
				}
			}
			
		}
	}		
} 


public class Demo4 {
	
	public static void main(String[] args) {
		//建立三個執行緒物件,模擬三個視窗
		SaleTicket thread1 = new SaleTicket("視窗1");
		SaleTicket thread2 = new SaleTicket("視窗2");
		SaleTicket thread3 = new SaleTicket("視窗3");
		//開啟執行緒售票
		thread1.start();
		thread2.start();
		thread3.start();	
	}
}


相關推薦

Java 程式練習

一、四位隨機驗證碼 package lx2; import java.util.Random; public class Demo5 { public static void main(String[] args) { char[] arr={'s','b','

Java遊戲DanceWithStars:修改本地文件中的圖片圖片寬高和圖片型別以及將圖片設定為JButton的影象

1. 修改本地文件中的圖片(圖片寬高和圖片型別) 為了使下載的圖片素材都具有統一的width和height,需要對下載來的圖片重新處理並另存 主要思想是:構造一個BufferedImage物件,用ImageIO.read()讀入,再用ImageIO.write()重畫 程式碼如下: 1 pac

微信程式筆記

整理資料 第三方元件庫 ZanUI這個是老版的,新版的現在是vant-weapp,現在來看這兩個可以互補。 wux-weapp這個沒用過,但是光看效果功能比上面的多。 weui-wxss微信官方的UI庫,瞭解下就行。因為上面三個隨便選一個,基本也就用不到它了

【python學習】新手基礎程式練習

Ι  繼續上一節得內容,這裡主要是對各種知識的理解以及如何運用。 一、執行 Python 指令碼的兩種方式 1.把python執行檔案加到計算機的環境變數中,然後新建檔案把程式寫在新檔案裡,再通過cmd命令開啟命令提示符終端,輸入python + 檔名(路徑也要寫全)回車執行即可。 2.直接在命令列輸入

程式磚塊利用console.log(e)檢視和使用事件傳值

寫小程式時可以利用console.log(e)來檢視傳值情況並使用xxx:function(e){ console.log(e); }然後就可以在偵錯程式中看到傳值情況下面用小程式提供的QuickStart做例子在index.js的事件處理函式getUserInfo:

微信程式開發圖片上傳+服務端接收

上次介紹了小程式開發中的微信登入。文章: 微信小程式開發(一) 微信登入流程, 這次介紹下小程式當中常用的圖片上傳。 前幾天做了圖片上傳功能,被坑了一下。接下來我們來看一下微信的上傳api。 這裡的filePath就是圖片的儲存路徑,型別居然是個

Java練習

ins == rime lse new ring 素數 如果能 main 題目:判斷101-200之間有多少個素數,並輸出所有素數。 判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整除,則表明此數不是素數,反之是素數。 public class Test

程式篇:伺服器接收程式圖片

小程式圖片上傳,在伺服器上接收小程式上傳的圖片 前面一篇介紹了本地搭建小程式測試伺服器,但是有一定侷限性:不能上傳圖片。因為小程式上傳圖片需要驗證公用ssl證書,使用一些不正規的免費證書不能完成上傳。所以我在阿里雲上申請了一個用來測試,方法:linux伺服器配置https 。當完成這

Java 由淺入深GUI程式設計實戰練習

一,專案簡介 1.利用Java GUI 繪製圖像介面,設定整體佈局 2.編寫一個隨機數生成1~100的隨機數 3.編寫一個驗證類,用於驗證使用者輸入值與生成隨機數是否相等並記錄使用者猜測次數,當用戶猜測成功或者超過5次結束遊戲 二,執行介面 三,程式碼實現 import java.awt

微信程式把玩十三modal元件

modal彈出框常用在提示一些資訊比如:退出應用,清楚快取,修改資料提交時一些提示等等。 常用屬性: wxml <!--監聽button點選事件--> <button b

python練習——

話不多說,直接放程式碼: import numpy as np import math #第一題,考慮一個數組z=[1,2,3,4,5,6,7,8,9,10,11,12,13,14],如何生成一個數組R=[[1,2,3,4],[2,3,4,5]...,[1

微信程式把玩十七audio元件

音訊播放已經封裝的很好!只需配合屬性設定即可! (method和data配合使用) 主要屬性: wxml <audio action="{{action}}"

微信程式把玩十八image元件

image元件也是一個程式不可缺少的,可以這樣說一個app中image元件隨處可以看到,一般 image有兩種載入方式第一種是網路圖片第二種是本地圖片資源,都用src屬性去指定。 重點屬性:

微信程式把玩十五loading元件

loading通常使用在請求網路資料時的一種方式,通過hidden屬性設定顯示與否 主要屬性: wxml <!----> <button type="primary"

java實現程式開發

上次Token(令牌和訊息祕鑰獲取到了); 現在就是開發小程式:首先就是要將小程式繫結在開發平臺下,同時指定自己伺服器的一個回撥地址這樣微信會定時每隔10分鐘向指定的伺服器傳送資料。如圖 同時配置你授權的一些資訊: 這裡指定伺服器接收微信推送過來的

程式JAVA實戰」微信程式簡介

轉自:https://idig8.com/2018/08/09/xiaochengxu-chuji-01/ 一直想學習小程式,苦於比較忙,加班比較多沒時間,其實這都是理由,很多時候習慣了搬磚,習慣了固定的圈子很難,也不想涉足其他的領域,但是也不能老錯過一波又一波新鮮的東西吧。09年就接觸微信,2013

微信程式把玩十九video元件

視訊播放元件與圖片載入元件也沒啥差別,使用起來也沒啥注意的 重要屬性: wxml <!--監聽button點選事件--> <button bindtap="liste

Java開發桌面程式學習————fxml佈局與控制元件學習

JavaFx專案 新建完專案,我們的專案有三個檔案 Main.java 程式入口類,載入介面並顯示 Controller.java 事件處理,與fxml繫結 Sample.fxml 介面 sample.fxml需要通過標籤fx:controller定義對應的controller <!-- 最外

Java內存模型——重排序

序列 依賴性 種類 如果 禁止 加載 runtime 屬於 style 一、重排序   重排序是指為了提高程序的執行效率,編譯器和處理器常常會對語句的執行順序或者指令的執行順序進行重排。 編譯器優化的重排序:編譯器在不改變單線程程序語義的前提下,可以重新安排語句的執行順序

java高級工程師

代理 man 順序 方法 one java web 功能 acm dispatch 一、Java底層基礎題 1、SpringMVC的原理以及返回數據如何渲染到jsp/html上? 答:Spring MVC的核心就是 DispatcherServlet , 一個請求經過 Di