新建线程并启动的几种方法:
1
privateThreadthread=newThread("myThread");
Thread.start();
2
privateclassmyThreadextendsThread{
@Override
publicvoidrun(){
}
}
myThreadthread=newmyThread().start();
3
privateThreadthread=newThread(){
//构造器
@Override
publicvoidrun(){
}
};
thread.setName("myThread");
Thread.start();
4Threadthread=newThread(task);//传入任务
Thread.start();
5
Threadthread=newThread(task,"myThread");
Thread.start();
注:线程启动的时候一定要给它命名,以便于后期排错
响应线程中断
程序要对线程的中断作出对应的响应
方法一:
privateclassmyThreadextendsThread{
/**
*构造器
*/
publicmyThread(){
}
@Override
publicvoidrun(){
for(;;){
//耗时操作
doxxx();
//如果线程中断,作出相应操作
if(Thread.interrupted()){
break;
}
}
}
}
方法二:
方法三:
privateclassmyThreadextendsThread{
/**
*构造器
*/
publicmyThread(){
}
@Override
publicvoidrun(){
for(;;){
try{
doxxx();
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
}
}
ThreadLocal(线程局部变量)作用就是为每个使用变量线程提供一个变量的副本
这样每个线程都可以改变自已的线程
使用线程局部变量一般定义在表态变量
注:如果没有调用remove方法,将会使内存溢出
任务的提交者和执行者
利用Executors这个工厂类来生产自已需要的executor
executorService=Executors.newFixedThreadPool(10);
任务的提交者和执行者之间的通信手段Future
//单例线程池
executorService=Executors.newSingleThreadExecutor();
classTaskWithResultimplementsCallable<String>{
@Override
publicStringcall()throwsException{
Stringresu="";
returnresu;
}
}
TaskWithResulttaskWithResult=newTaskWithResult();
Future<String>future=executorService.submit(taskWithResult);
try{
future.get();
}catch(InterruptedExceptione){
e.printStackTrace();
}catch(ExecutionExceptione){
e.printStackTrace();
}
Future的几个主要方法:
future.get();//阻塞主任务完成
future.cancel(ture);
Future.get(timeOut);//等待一段时间
线程池Executors中的部分方法
//一个可以重用固定线程数的线程池,以共享的无界队列方式来运行这些线程,
//在需要时可用ThreadFactory创建新线程,在关闭之前,池中的线程将一直存在
publicstaticExecutorServicenewFixedThreadPool(intnThreads){
returnnewThreadPoolExecutor(nThreads,nThreads,
0L,TimeUnit.MILLISECONDS,
newLinkedBlockingQueue<Runnable>());
}
//用于创建新线程的默认线程工厂,此工厂创建同一个线程组,如果有securityManager
//则它使用System.getXecurityManager()返回的组
publicstaticThreadFactorydefaultThreadFactory(){
returnnewDefaultThreadFactory();
}
//创建一个可以根据需要创建新线程的线程池,以前创建的线程可用时就重用它们
publicstaticExecutorServicenewCachedThreadPool(ThreadFactorythreadFactory){
returnnewThreadPoolExecutor(0,Integer.MAX_VALUE,
60L,TimeUnit.SECONDS,
newSynchronousQueue<Runnable>(),
threadFactory);
}
//它可以在规定延迟后运行命令或定期执行
publicstaticScheduledExecutorServicenewScheduledThreadPool(intcorePoolSize){
returnnewScheduledThreadPoolExecutor(corePoolSize);
}
//在未来某个指定的时间执行给定的命令
voidexecute(Runnablecommand);
//执行一次顺序关闭,执行一次之前提交的任务,并不接受新任务
voidshutdown();
线程的基本控制
thread.interrupt();
thread.sleep(0);
thread.join();
thread.start();
//过时的方法
thread.suspend();
thread.destroy();
thread.stop();
thread.resume();