(day19)线程池+网络编程

2019.07.23(day19)

线程池:


    把若干用户线程添加到线程池中,由线程池来管理线程

为什么要用线程池:
    1.减少了创建和销毁线程的次数,每个工作线程都可以被重复的使用,可以并发执行多个任务
    2.可以根据系统的承受能力,调整线程池中的工作线程的数目,防止因为消耗过多的内存而使服务器宕机(down)
    结论:
        java提供一些api方法用于更好的管理线程,让程序员主要用于写线程的逻辑

线程池的使用:
    有一个Excutors的工具类,此类提供了若干静态方法
    这些静态方法用于生成线程池的对象

    手动创建一个线程池

ThreadPoolExecutor ppp=new ThreadPoolExecutor(int corePoolSize, int                                  
                             maximumPoolSize,long keepAliveTime,TimeUnit 
                             unit,BlockingQueue<Runnable>workQueue,
                             RejectedExecutionHanlder handler);  

 
    corePoolSize:核心池的大小            5
    maximumPoolSize:最大池的大小            10
    keepAliveTime:空闲的多余线程保持时间    30    
    unit:时间单位                        秒
    workQueue:阻塞式队列                    BlockingQueue(5)
    handler:拒绝服务助手
  

 


1.Executors.newSingleThreadExecutor();

    public static ExecutorService newSingleThreadExecutor() {
        return new FinalizableDelegatedExecutorService
        (new ThreadPoolExecutor(1, 1,0L, TimeUnit.MILLISECONDS,
                        new LinkedBlockingQueue<Runnable>()));
    }


    创建一个单线程的线程池,这个线程池只有一个线程在工作
    单线程执行任务,如果这个唯一的线程因为异常结束,就会有一个新的线程来替代它
    线程池保证所有的任务是按照任务的提交顺序来执行的

2.Executors.newFixedThreadPool();

    public static ExecutorService newFixedThreadPool(int nThreads) {
        return new ThreadPoolExecutor(nThreads, nThreads,0L, TimeUnit.MILLISECONDS,
                                      new LinkedBlockingQueue<Runnable>());
    }

    创建固定大小的线程池,每次提交一个任务就创一个线程,直到达到线程池的最大容量
    线程池达到了最大容量就会保持不变
    如果这个线程因为执行异常而结束,就会补充一个新的线程

3.Executors.newCachedThreadPool();

    public static ExecutorService newCachedThreadPool() {
        return new ThreadPoolExecutor(0, Integer.MAX_VALUE,60L, TimeUnit.SECONDS,
                                      new SynchronousQueue<Runnable>());
    }


    创建一个可以缓冲的线程池,如果线程池的大小超过了处理的任务所需的线程
    就会回收部分线程
    当任务数增加的时候,此线程池又可以智能的添加新的线程来处理任务
    此线程池不会对线程池的大小做限制,线程池的大小完全依赖操作系统能够创建的最大容量

4.Executors.newScheduledThreadPool();    

    public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) {
        return new ScheduledThreadPoolExecutor(corePoolSize);
    }


    创建一个大小无限制的线程池
    此线程支持定时以及周期性的执行任务的需求

 

网络编程:


分类:
tcp编程(重点):
    传输控制协议,能够保证数据传递不丢失
udp编程(省略):
    不能保证数据传递不丢失

若干名词:
-socket套接字
-ip地址
    ipv4    4段地址
    ipv6    6段地址        
    用于唯一确定网络上的计算机
-端口号:
    每台计算机都有65536个端口        0-65535
    是能够访问计算机的"门"
    特殊的内置端口:
        80端口:http协议的默认端口    超文本传输协议
        21端口:ftp协议的默认端口    文件传输协议
        25端口:smtp协议的默认端口    邮件传输协议    
-tcp/ip:传输控制协议/网络协议

socket套接字:
    用于描述ip地址和端口号,是一个通讯链的句柄(java的引用)
    在internet上的一个主机,一般运行多少个服务的软件,就提供多少个服务
    每个服务监听一个端口,不同的端口对应不同的服务
    最终应用程序和服务器通过socket套接字建立网络连接
    发送请求和接收请求

服务端的套接字:
    ServerSocket类:
        Socket accept();
            用于监听并接受到套接字的连接
        void close();
            关闭socket
        InetAddress getInetAddress();
            返回此服务器套接字的本地地址
        int getLocalport();
            返回此套接字在其上的监听的端口号

客户端套接字:    
    Socket类:
        Socket(String host,int port);
            创建一个套接字并将其连接带指定的ip地址,和这个ip地址对应的窗口号
        void close();
            关闭socket
        InetAddress getInetAddress();
            返回此服务器套接字的本地地址
        int getLocalport();
            返回此套接字在其上的监听的端口号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值