线程
1、Java采用比较传统的方式,在顺序语言的基础上提供对线程的支持:多线程机制是在由执行程序所表示的单一进程中创建任务;
2、Java的线程机制是抢占式,即调度周期会周期性地中断线程,将上下文切换到另一个线程,从而为每一个线程提供时间片,使得每一个线程都会分配到数量合理的时间去驱动它的任务;
class DemoTask implements Runnable{
public run(){
statements;
//线程暂停的2种常用方式
Thread.sleep(1000); // 或 TimeUnit.MILLISECONDS.sleep(1000);使本线程休眠的便捷方法;
Thread.yield();
};
}
* void main(){
* Thread thread = new Thread(new DemoTask());
* thread.start();
* }import java.util.concurrent.*;
void main() {
ExecutorService executor = Executors.newFixedThreadPool(n); /newCachedThreadPool();
executor.execute(new Task());
executor.shutdown(); /shutdownNow();
//shutdown()能防止新任务被提交给改Executor,当前线程将继续运行在shutdown之前提交的所有任务;calss DemoTask implements Callable<Date>{
public Date call(){
return new Date();
}
}
main(){
ExecutorServices exetuor = Executors.newCashedThreadPool();
List<Future<Date>> results = ArrsyList<Future<Date>>();
for(int i=0;i<10;i++)
results.add(executor.submit(new DemoTask()));
//使用submit方法会产生Future对象,可以使用isDone()来检测Future是否已经完成,使用get()获取具体值;
for(Future<Date> fs : results){
try{
System.out.println(fs.get());
}catch(InterruptedExcecption e){
}catch(ExecutionException e){
}fianlly{
executor.shutdown();
}
}
}class Task implements Runnable{
public void run(){
Thread.currentThread().setPriority(MIN_PRIORITY);
}
}class DaemonTask implements Runnable{
public void run(){
statements;
//Thread.currentThread().setDaemon(true); 直接在任务类中标注
}
}
main(){
Thread daemon = new Thread(new DaemonTask());
daemon.setDaemon(true);
daemon.start();
}class DemoThread extends Thread{
public DemoThread(){
super("testdemo");
start();
}
public void run(){
statements;
}
public static void main(){
new DemoThread();
}
}//定义抛出异常线程类
class TaskDemo implements Runnable{
public void run(){
throw new RunTimeException();
}
}
//定义线程异常处理器
class UncaughtExceptionHandlerDemo implements Thread.UncaughtExceptionHandler{
public void uncaughtException(Thread t,Throwable e){
System.out.println("caught"+e);
}
}
方式1.使用默认未捕获异常处理器
public static void main(String[] args){
Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionDemo());
ExecutorService exec = Executors.newCachedThreadPool();
exec.execute(new TaskDemo());
}
方式2.使用自定义未捕获异常处理器
class HandlerFactory implements ThreadFactory{
//自动创建线程,同时绑定未捕获异常处理器,可以在代码块里添加自定义的处理语句;
public Thread newThread(Runnable r){
Thread t = new Thread(r);
t.setUncaughtExceptionHandler(new UncaughtExceptionHandlerDemo());
//System.out.println("eh"=t.getUncaughtexceptionHandler());
return t;
}
}
public static void main(String[] args){
ExecutorService executor = Executors.newCachedThreadPool(new HandlerFactory());
executor.execute(new ThreadDemo());
}
488



被折叠的 条评论
为什么被折叠?



