2012-11-28 9 views
12

Hey vì vậy tôi có 3 chủ đề có điều kiện nhất định khi họ in ra một cái gì đó. điều này hoạt động tốt. Những gì tôi muốn làm bây giờ là làm cho thread ngay trước khi nó xuất ra một cái gì đó để gửi nó vào giấc ngủ cho số lượng ngẫu nhiên của ms. Tôi đã suy nghĩ bằng cách sử dụng lớp toán học nhưng không chắc chắn như thế nào.Làm cho chủ đề ngủ cho số lượng ngẫu nhiên của MS

ngẫu nhiên() sẽ tạo ngẫu nhiên gấp đôi lớn hơn hoặc bằng 0,0 và nhỏ hơn 1,0 phải không?

sẽ Tôi chỉ viết một cái gì đó giống như

Thread.sleep(random()); 

^mà không hoạt động mặc dù đã cố gắng nó

Trả lời

17

Thread.sleep() mất một giá trị long không double. Bạn sẽ cần một thợ đúc chư đây: -

Thread.sleep((long)(Math.random() * 1000)); 
+0

hank bạn! Nhiều đánh giá cao nó! – Tom

+0

@Tom .. Bạn được chào đón :) –

9

Thread.sleep() mất một giá trị long, đó là số mili giây để ngủ. Việc truyền giá trị dấu phẩy động giữa 0 và giá trị sẽ không hoạt động vì giá trị sẽ luôn bị cắt bớt về 0.

Để khắc phục điều này, hãy tạo một số nguyên ngẫu nhiên từ một phạm vi thích hợp và chuyển số đó đến Thread.sleep().

Ví dụ: để ngủ trong tối đa một giây, hãy sử dụng Thread.sleep(random.nextInt(1000));. Tại đây, random là một đối tượng thuộc loại Random.

4

Có hai vấn đề với mã của bạn:

  1. Lượng nhỏ nhất của thời gian bạn có thể sleep() là 1 mili giây

  2. loại là không đúng: double vs long.

này sẽ làm việc:

Thread.sleep((long)(Math.random() * 1000)); 

Nó sẽ ngủ cho một cái gì đó giữa 0 và 1000 mili giây.