
想看看是怎么回事
,
比如有1000張電影票,一個執行緒賣的話要30ms
那開3個執行緒應該只要10ms就能賣完吧,
那怎么統計這耗時啊,各位大佬


uj5u.com熱心網友回復:
for (Thread thread : threads) {
thread.join();
}
uj5u.com熱心網友回復:
怎么用啊大佬,不是說加入執行緒 會變成一個執行緒嗎,那這樣多執行緒就變單線了,沒意義了uj5u.com熱心網友回復:
執行緒
uj5u.com熱心網友回復:
利用 Thread.activeCount();uj5u.com熱心網友回復:
countDownLatch符合你的需求uj5u.com熱心網友回復:
麻煩大佬給個例子,新手小白一枚
uj5u.com熱心網友回復:
買之前讀取當前時間,賣完在讀取當前時間。這樣可以嗎uj5u.com熱心網友回復:

不知怎么實作,多執行緒 不知如何操作,有代碼就好了
uj5u.com熱心網友回復:
多執行緒都沒什么人玩嗎?應該很香的呀
uj5u.com熱心網友回復:
這是countDownLatchhttps://blog.csdn.net/dotnetstudio/article/details/105612394
uj5u.com熱心網友回復:
package pack;
/*
電影賣票
*/
public class Solution {
private static int count = 1000;
private static Object obj = new Object();
public static void main(String[] args) {
Buy wuxia = new Buy();
Buy kehuan = new Buy();
wuxia.setName("瞎幾把打");
kehuan.setName("朝我開炮");
wuxia.start();
kehuan.start();
}
public static class Buy extends Thread {
@Override
public void run() {
long startTime = System.currentTimeMillis();
while (true) {
synchronized (obj) {
if (count == 0) {
long endTime = System.currentTimeMillis();
float time = (float) (endTime - startTime) / 1000;
System.out.println(Thread.currentThread().getName() + "耗時" + time);
break;
} else {
count--;
}
System.out.println(Thread.currentThread().getName() + " 賣出一張,剩余 " + count + " 張。");
}
}
}
}
}
瞎幾把打 賣出一張,剩余 20 張。
瞎幾把打 賣出一張,剩余 19 張。
瞎幾把打 賣出一張,剩余 18 張。
瞎幾把打 賣出一張,剩余 17 張。
瞎幾把打 賣出一張,剩余 16 張。
瞎幾把打 賣出一張,剩余 15 張。
瞎幾把打 賣出一張,剩余 14 張。
瞎幾把打 賣出一張,剩余 13 張。
瞎幾把打 賣出一張,剩余 12 張。
瞎幾把打 賣出一張,剩余 11 張。
瞎幾把打 賣出一張,剩余 10 張。
瞎幾把打 賣出一張,剩余 9 張。
瞎幾把打 賣出一張,剩余 8 張。
瞎幾把打 賣出一張,剩余 7 張。
瞎幾把打 賣出一張,剩余 6 張。
瞎幾把打 賣出一張,剩余 5 張。
瞎幾把打 賣出一張,剩余 4 張。
瞎幾把打 賣出一張,剩余 3 張。
瞎幾把打 賣出一張,剩余 2 張。
瞎幾把打 賣出一張,剩余 1 張。
瞎幾把打 賣出一張,剩余 0 張。
瞎幾把打耗時0.05
朝我開炮耗時0.065
行程已結束,退出代碼0
好像大家都喜歡看瞎幾把打的武俠,也不太愛看朝我開炮
uj5u.com熱心網友回復:
老哥,你這是單執行緒的計時吧,
多執行緒怎么計時啊
uj5u.com熱心網友回復:
謝謝老哥,。
uj5u.com熱心網友回復:
public class Ts {
public static void main(String[] args) {
// TODO Auto-generated method stub
test();
}
private static void test() {
Xc xc=new Xc();
long startTime=System.currentTimeMillis();
Thread t1=new Thread(xc);
Thread t2=new Thread(xc);
Thread t3=new Thread(xc);
t1.setName("t1");
t2.setName("t2");
t3.setName("t3");
t1.start();
t2.start();
t3.start();
while(t1.isAlive()||t2.isAlive()||t3.isAlive()) { }
long endTime=System.currentTimeMillis();
System.out.println("當前程式耗時,"+(endTime-startTime)+"ms");
}
}
class Xc implements Runnable{
private static int count=1000;
@Override
public synchronized void run() {
// TODO Auto-generated method stub
while(true) {
if(count<=0) {
break;
}else {
count--;
System.out.println(Thread.currentThread().getName()+"賣出一張,剩余"
+ count+"張");
}
}
}
}
uj5u.com熱心網友回復:
老哥,你這是單執行緒的計時吧,
多執行緒怎么計時啊
你是咋判斷出我這個是單執行緒的
uj5u.com熱心網友回復:
你這 沒有意義啊,加上同步,和單執行緒一樣的效率,不加同步 無法保證并發;uj5u.com熱心網友回復:
你是咋判斷出我這個是單執行緒的
if(瞎幾把打耗時0.05
朝我開炮耗時0.065 ? 分別計時){
}
uj5u.com熱心網友回復:
你這 沒有意義啊,加上同步,和單執行緒一樣的效率,不加同步 無法保證并發;
老哥,照這么說,多執行緒就是一個花瓶么。。。
uj5u.com熱心網友回復:
你是咋判斷出我這個是單執行緒的
if(瞎幾把打耗時0.05
朝我開炮耗時0.065 ? 分別計時){
}

4個執行緒啊,你從計時咋判斷的
uj5u.com熱心網友回復:
你還沒理解。我是說,4個執行緒。多個執行緒統計
不是分別統計
uj5u.com熱心網友回復:
多執行緒賣電影票,這個業務邏輯非常難,在高并發情況下可能出現多買情況,一般是在業務內不會開多執行緒的,但常用的MVC是單例多執行緒會加鎖鎖住買票時候一張一張的買uj5u.com熱心網友回復:
這個票源應該有個池子吧,票應該有個編號吧,取第一張票的時候記個時間,哪個執行緒取到池子里面最后一張票,并且售出去了,再記個時間,就是最后統計的時間了唄。雖然可能不太準(其他執行緒可能執行比最后一個慢),但實際用絕對夠了。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/19337.html
標籤:Web 開發
