thread.start();
Thread thread1 = factory.newThread(runnable);
thread1.start();
复制代码
Executor线程池:
Executor线程池(最为推荐):
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println(“Thread with Runnable started!”);
}
};
Executor executor = Executors.newCachedThreadPool();
executor.execute(runnable);
executor.execute(runnable);
executor.execute(runnable);
复制代码
Callable 和 Future:
Callable
与Runnable
类似,同样是只有一个抽象方法的函数式接口。不同的是,Callable
提供的方法是有返回值的,而且支持泛型。
@FunctionalInterface
public interface Callable {
V call() throws Exception;
}
复制代码
Callable和Future一般成对出现,future.get()
获取异步执行的结果,如果没有结果可用,此方法会阻塞直到异步计算完成。
Callable callable = new Callable() {
@Override
public String call() {
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
e.printStackTrace();
}
return “Done!”;
}
};
ExecutorService executor = Executors.newCachedThreadPool();
Future future = executor.submit(callable);
try {
String result = future.get();
System.out.println("result: " + result);
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
复制代码
线程安全和线程同步
=========
线程安全:指函数在多线程环境中被调用时,能够正确地处理多个线程之间的全局变量,使得功能正确完成。
线程同步:即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作。
线程同步不等于