线程池的运用及重定向

本文介绍了Java线程池的概念及其作用,展示了如何使用`ExecutorService`创建固定大小的线程池,并解释了关闭线程池的两种方式。此外,还详细讲解了HTTP重定向的含义、特点和规则,以及在实际应用中如何使用`sendRedirect()`方法避免表单重复提交和减少服务端负担。
摘要由CSDN通过智能技术生成

 

 

 

 

 

 通过一个实例来演示:

/**
 * 线程池
 * 线程池是线程的管理机制,它主要解决两方面的问题:
 * 1:复用线程
 * 2:控制线程数量
 */
public class ThreadPoolDemo {
    public static void main(String[] args) {
        /*
            JUC是什么?java.util.concurrent这个包
            concurrent并发
            java的并发包,里面都是与多线程相关的API。线程池就在这个包里
         */
        //创建一个固定大小的线程池,容量为2
        ExecutorService threadPool = Executors.newFixedThreadPool(2);

        for(int i=0;i<5;i++){
            Runnable r = new Runnable() {
                @Override
                public void run() {
                    Thread t = Thread.currentThread();
                    System.out.println(t.getName()+"正在执行一个任务");
                    try {
                        Thread.sleep(5000);
                    } catch (InterruptedException e) {

                    }
                    System.out.println(t.getName()+"执行一个任务完毕");
                }
            };
            threadPool.execute(r);
            System.out.println("交给线程池一个任务...");
        }
        /*
            关闭线程的两个操作:
            shutdown()
            该方法调用后,线程不再接受新任务,如果此时还调用execute()就会抛出异常
            并且线程池会继续将已经存在的任务全部执行完毕后才会关闭。

            shutdownNow()
            强制中断所有线程,来停止线程池。
         */
        threadPool.shutdown();
        System.out.println("线程池关闭了!");
        
    }
}

重定向:

重定向及内部跳转的含义:

 

内部跳转:特点:一次请求完成所有操作

重定向:

特点:两次请求完成所有操作

好处:避免表单的重复提交。减少服务端不必要的开销。

重定向的规则:

响应中的状态代码为302

响应头中应包含Location

没有响应正文

重新定向的类:

/**
     * 使浏览器重新定向到指定位置
     * @param location
     */
    public void sendRedirect(String location){
        this.statusCode = 302;
        this.statusReason = "Moved Temporarily";

        addHeader("Location",location);
    }

运用定向类:

首先判断是不是"/myweb/reg"的注册应用

1,未定向之前执行注册应用,注册页面地址一直是http://localhost:8088/myweb/reg.html,点击注册后显示注册成功页面,此页面地址是http://localhost:8088/myweb/reg。此时在"注册成功"点刷新,会再按照http://localhost:8088/myweb/reg这个地址重新跑一遍。

2,定向之后,执行点击提交http://localhost:8088/myweb/reg之后,出现注册成功页面,此时注册成功页面的地址就是"/myweb/reg_success.html",因为此时在返回"注册成功"页面时不是直接返回页面了,而是系统自己会进行一个调用页面的请求,执行这个代码:response.sendRedirect("/myweb/reg_success.html");,即"http://localhost:8088/myweb/reg_success.html"。此时"注册成功"页面的地址就是"http://localhost:8088/myweb/reg_success.html"。此时再点刷新就是反复执行返回图片功能了

File userFile = new File(userDir,username+".obj"); //-----------------------------------------------------------------------
        /*
            判断是否为重复用户,若重复用户,则直接响应页面:have_user.html
            该页面剧中显示一行字:该用户已存在,请重新注册
         */
        if(userFile.exists()){
//            File file = new File(staticDir,"/myweb/have_user.html");
//            response.setContenFile(file);
            response.sendRedirect("/myweb/have_user.html");
            return;
        }

        try (
                FileOutputStream fos = new FileOutputStream(userFile);
                ObjectOutputStream oos = new ObjectOutputStream(fos);
        ){
            User user = new User(username,password,nickname,age);
            oos.writeObject(user);

            //注册成功了
//            File file = new File(staticDir,"/myweb/reg_success.html");
//            response.setContenFile(file);
            response.sendRedirect("/myweb/reg_success.html");


        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值