目的:對線程知識進行一定的熟練
技術(shù):(1)線程的初步了解
(2)簡單的回調(diào)
(3)靜態(tài)的初步運用
(4)Scanner方法的簡單使用
具體代碼:
這個是對于顧客的基本屬性創(chuàng)建的一個類,主要起到簡潔性和可移植性,這里的封裝性不行,可以用privite對這個類進行封裝,用getter和putter方法實現(xiàn)讀寫。
package soid;
public class custemer {
public String name;
public int number;
public custemer(String name, int number) {
this.name = name;
this.number = number;
}
@Override//打印方法,讓這個類能夠打印出來
public String toString() {
return "custemer{" +
"name='" + name + '\'' +
", number=" + number +
'}';
}
}
package soid;
public class Myclass{
public static void main(String[] args){
soldcenter lead=new soldcenter();//一個對象
}
}
這里小編設(shè)置的運行中心,對程序的進程進行設(shè)置。
package soid;
import java.util.ArrayList;
public class soldcenter implements soldsystem.callback {
public static ArrayList<custemer> custemers=new ArrayList<>();
//一個靜態(tài)數(shù)組,這里多余了,一個普通的變量也行的
public soldcenter(){//構(gòu)造方法,創(chuàng)建對象時,運行
soldsystem.fuzhi();
soldsystem start1=new soldsystem();
start1.setName("南站口售票點");//子線程名稱設(shè)置
start1.temp = this ;//回調(diào)的實現(xiàn)
start1.start();
soldsystem start2 = new soldsystem();
start2.setName("北站口售票點");
start2.temp = this;
start2.start();
}
@Override
public void method(String variable1, int variable2) {//實現(xiàn)這個構(gòu)造方法
custemer custemp=new custemer(variable1,variable2);
System.out.println(custemp);
custemers.add(custemp);
}
}
package soid;
import java.util.Scanner;
public class soldsystem extends Thread{
public static String object="wan";//同一把鎖
public static int sun=4;//一個靜態(tài)變量
public static int[] a=new int[4];//定義一個靜態(tài)數(shù)組
callback temp;
Scanner read = new Scanner(System.in);
public static void fuzhi(){//一個靜態(tài)方法,給我們的數(shù)組賦值
for(int i=0;i<4;i++){//用1來表示沒有售出
a[i]=1;
}
}
@Override
public void run() {
while (sun > 0) {//一個死循環(huán)讓子線程不是運行多次
synchronized (object) {//每個對象都有鎖,嗯,這個在Object里面實現(xiàn)了的,確保為同一把鎖
for (int i = 0; i < 10; i++) {//我們的內(nèi)容
System.out.println("尊敬的顧客,歡迎光臨" + Thread.currentThread().getName() +
"!" + "\n" + "" +
"1、購買位置號數(shù)" + "\n" + "2、退出");
int temp2 = read.nextInt();//得到選擇
System.out.println(temp2);//檢查用的,可以不要
if (temp2 == 1) {//依照選項多少分成幾類,因為這里小編的選擇較少沒有用Switch
System.out.println("請輸入你想購買的位置號數(shù):");
int temp3;//這兩個變量也可以放上面,變量放一起比較
// 好。但這里為了閱讀,就放這了
int temp4;
while (true) {//一個死循環(huán),因為不知道要輸入多少次
temp4 = read.nextInt();
if (a[temp4] == 1) {//判斷是否存在,依據(jù)就是我們之前設(shè)置的那個靜態(tài)數(shù)組
System.out.println("當前票有剩余,請選擇:" + "\n" +
"1、購買" + "\n" + "2、返回上一頁面");
temp3 = read.nextInt();
System.out.println(temp3);//一樣是檢查
read.nextLine();//吸收多余的空格,習(xí)慣了,很有用,因為我們之后要連
// 著用一個字符串的輸入
break;
} else {
System.out.println("當前票無剩余,請重新輸入:");
}
}
if (temp3 == 1) {//一個分支,在我們的1選擇下的分支
System.out.println("請輸入你的姓名:");
String temp1 = read.nextLine();
System.out.println(temp1);
System.out.println(temp1 + "顧客" + "購買成功,感謝你的光臨");
a[temp4] = 0;//不為1就行了
temp.method(temp1, temp2);//這個就是調(diào)用方法了
sun--;//每次賣出一張票,票的總數(shù)都要減去一
System.out.println(sun);//檢查
object.notify();//一個一個子線程輪著運行
try {
object.wait();
} catch (InterruptedException e) {
}
break;
} else {
i--;
continue;
}
} else {
System.out.println(sun);
object.notify();
try {
object.wait();
} catch (InterruptedException e) {
}
break;
}
}
}
}
synchronized (object) {//運行完打印結(jié)果
System.out.println(Thread.currentThread().getName() + ",票已經(jīng)售完!");
object.notify();
try {
object.wait();
} catch (InterruptedException e) {
}
}
}
interface callback {//接口
void method(String variable1, int variable2);
}
}
結(jié)果,結(jié)果有點長,不過功能是都實現(xiàn)了的,那個靜態(tài)數(shù)組顯得有點多余了。
尊敬的顧客,歡迎光臨南站口售票點!
1、購買位置號數(shù)
2、退出
1
1
請輸入你想購買的位置號數(shù):
0
當前票有剩余,請選擇:
1、購買
2、返回上一頁面
1
1
請輸入你的姓名:
xw
xw
xw顧客購買成功,感謝你的光臨
custemer{name='xw', number=1}
3
尊敬的顧客,歡迎光臨北站口售票點!
1、購買位置號數(shù)
2、退出
2
2
3
尊敬的顧客,歡迎光臨南站口售票點!
1、購買位置號數(shù)
2、退出
2
2
3
尊敬的顧客,歡迎光臨北站口售票點!
1、購買位置號數(shù)
2、退出
2
2
3
尊敬的顧客,歡迎光臨南站口售票點!
1、購買位置號數(shù)
2、退出
1
1
請輸入你想購買的位置號數(shù):
1
當前票有剩余,請選擇:
1、購買
2、返回上一頁面
1
1
請輸入你的姓名:
ly
ly
ly顧客購買成功,感謝你的光臨
custemer{name='ly', number=1}
2
尊敬的顧客,歡迎光臨北站口售票點!
1、購買位置號數(shù)
2、退出
1
1
請輸入你想購買的位置號數(shù):
0
當前票無剩余,請重新輸入:
2
當前票有剩余,請選擇:
1、購買
2、返回上一頁面
1
1
請輸入你的姓名:
zs
zs
zs顧客購買成功,感謝你的光臨
custemer{name='zs', number=1}
1
尊敬的顧客,歡迎光臨南站口售票點!
1、購買位置號數(shù)
2、退出
1
1
請輸入你想購買的位置號數(shù):
1
當前票無剩余,請重新輸入:
3
當前票有剩余,請選擇:
1、購買
2、返回上一頁面
1
1
請輸入你的姓名:
ls
ls
ls顧客購買成功,感謝你的光臨
custemer{name='ls', number=1}
0
北站口售票點,票已經(jīng)售完!
南站口售票點,票已經(jīng)售完!
感悟:慢慢來吧,感覺自己好像學(xué)到了一點東西的時候,或許就在明天吧。嗯,還是湊一湊字數(shù)吧。風(fēng)掃落花形婀娜,雨擊清流聲空幽。勸君末為前路愁,途盡自有青云樓。困難過后才是彩虹,所以,要堅持呀!