Trong NetBeans, có một gợi ý mới cho biết: Thread.sleep được gọi trong vòng lặp.NetBeans/Java/Gợi ý mới: Thread.sleep được gọi trong vòng lặp
Câu hỏi 1: Làm thế nào khi nào có thể xảy ra sự cố khi ngủ trong vòng lặp?
Câu hỏi 2: Nếu đó là vấn đề, tôi nên làm gì?
CẬP NHẬT: Câu hỏi 3: Dưới đây là một số mã. Nói với tôi trong trường hợp này nếu tôi nên sử dụng cái gì khác thay vì Thread.Sleep trong một vòng lặp. Trong ngắn hạn, điều này được sử dụng bởi một máy chủ mà lắng nghe các kết nối TCP khách hàng. Giấc ngủ được sử dụng ở đây trong trường hợp đạt đến số lượng phiên tối đa với khách hàng. Trong tình huống này, tôi muốn ứng dụng đợi cho đến khi phiên miễn phí khả dụng.
public class SessionManager {
private static final int DEFAULT_PORT = 7500;
private static final int SLEEP_TIME = 200;
private final DatabaseManager database = new DatabaseManager();
private final ServerSocket serverSocket = new ServerSocket(DEFAULT_PORT);
public SessionManager() throws IOException, SQLException
{
}
public void listen()
{
while (true)
if (Session.getSessionCount() < Session.getMaxSessionCount())
try
{
new Thread(new Session(database, serverSocket.accept())).start();
}
catch (IOException ex) { ex.printStackTrace(); }
else
try
{
Thread.sleep(SLEEP_TIME);
}
catch (InterruptedException ex) { ex.printStackTrace(); }
}
public static void main(String[] args) throws IOException, SQLException
{
new SessionManager().listen();
}
}
Làm thế nào về một java.util.Timer và TimerTask định kỳ? – Core
@Core - nó phụ thuộc vào cách bạn sử dụng nó. Nếu bạn chỉ sử dụng nó để thực hiện tương đương với 'sleep()', bạn có cùng các vấn đề như sử dụng 'sleep()'. –
nếu chúng ta đang sử dụng managedexecutorservice thì sao? – wib