1:使用安全类,比如 Java.util.concurrent 下的类。
例:Executorpackage concurrent.executor;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
/**
* Executors类,提供了一系列工厂方法用于创先线程池,返回的线程池都实现了ExecutorService接口。
* public static ExecutorService newFixedThreadPool(int nThreads)
* 创建固定数目线程的线程池。
* public static ExecutorService newCachedThreadPool()
* 创建一个可缓存的线程池,调用execute 将重用以前构造的线程(如果线程可用)。如果现有线程没有可用的,则创建一个新线程并添加到池中。终止并从缓存中移除那些已有 60 秒钟未被使用的线程。
* public static ExecutorService newSingleThreadExecutor()
* 创建一个单线程化的Executor。
* public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize)
* @author xiaoyang
*
*/
public class TaskExecutorWebServer {
private static final Executor exec=Executors.newFixedThreadPool(100);
public static void main(String[] args) throws Exception {
ServerSocket ss=new ServerSocket(8888);
while(true){
finalSocket connection= ss.accept();
Runnable task=new Runnable() {
@Override
public void run() {
//handleRequest(connection);
}
};
exec.execute(task);
}
}
}
2:使用自动锁 synchronized。public class Test1 implements Runnable{
public void run() {
synchronized(this){
System.out.println(System.currentTimeMillis());
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(System.currentTimeMillis());
}
}
public static void main(String[] args){
Test1 test = new Test1();
for(int i=0 ; i<10 ; i++){
new Thread(test).start();
}
}
}
3:使用手动锁 Lock。 手动锁 Java 示例代码如下:Lock lock = new ReentrantLock();
lock.lock();
try {
System. out. println("获得锁");
} catch (Exception e) {
// TODO: handle exception
} finally {
System. out. println("释放锁");
lock. unlock();
}
YUKX优科学习网
本文内容及图片来源于网上摘录或读者投稿