1,常用的Thread 和Running的方法
thread和running是完全一样的,threadFactory存在线程同步问题。
public static void thread(){
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("thread");
}
});
thread.start();
}
private static void running(){
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("running");
}
};
Thread thread = new Thread(runnable);
thread.start();
}
private static void threadFactory(){
ThreadFactory threadFactory = new ThreadFactory() {
int count = 0;
@Override
public Thread newThread(@NonNull Runnable r) {
count ++ ;
return new Thread(r,"Thread - "+count);
}
};
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
}
};
Thread thread1 = threadFactory.newThread(runnable);
Thread thread2 = threadFactory.newThread(runnable);
thread1.start();
thread2.start();
}
2,Android 最常用的Executor方法
private static void executor(){
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("executor");
}
};
Executor executor = Executors.newCachedThreadPool();
executor.execute(runnable);
executor.execute(runnable);
executor.execute(runnable);
}
3,自定义共用线程池
// 自定义共用线程池
BlockingDeque<Runnable> queue = new LinkedBlockingDeque<>(10000);
Executor threadPool = new ThreadPoolExecutor(5,100,5L, TimeUnit.SECONDS,queue);
4,又返回值的后台
// 又返回值的后台
static void callable(){
Callable<String> callable = new Callable<String>() {
@Override
public String call() throws Exception {
Thread.sleep(1500);
return "Done!";
}
};
ExecutorService executor = Executors.newCachedThreadPool();
Future<String> future = executor.submit(callable);
try {
String result = future.get();
System.out.println(result);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
5,其他
synchronized volatile Lock AtomicInteger(自增) ReentrantReadWriteLock(读写锁):读的时候,other可以读,但不可以写;写的时候,other读和写都不可以