try

线程池

江枫思渺然 提交于 2020-03-23 15:35:08
线程池 [TOC] 线程池概述 什么是线程池 为什么使用线程池 线程池的优势 第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 第二:提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。 第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。但是要做到合理的利用线程池,必须对其原理了如指掌。 创建一个线程池并提交线程任务 线程池源码解析 参数认识 corePoolSize : 线程池的基本大小,当提交一个任务到线程池时,线程池会创建一个线程来执行任务,即使其他空闲的基本线程能够执行新任务也会创建线程,等到需要执行的任务数大于线程池基本大小时就不再创建。如果调用了线程池的prestartAllCoreThreads方法,线程池会提前创建并启动所有基本线程。 runnableTaskQueue:任务对列,用于保存等待执行的任务的阻塞队列。可以选择以下几个阻塞队列。 ArrayBlockingQueue:是一个基于数组结构的有界阻塞队列,此队列按 FIFO(先进先出)原则对元素进行排序。 LinkedBlockingQueue:一个基于链表结构的阻塞队列,此队列按FIFO (先进先出) 排序元素,吞吐量通常要高于ArrayBlockingQueue

RedisTemplate

有些话、适合烂在心里 提交于 2020-03-23 12:29:42
/** * 定义常用的 Redis操作 * * @author zhongyj <1126834403@qq.com><br/> * @date 2019/12/9 */ @Slf4j @Service public class RedisHelper { @Resource private RedisTemplate<String, Object> redisTemplate; /** * =============================common============================ * 指定缓存失效时间 * * @param key 键 * @param time 时间(秒) * @return Boolean */ public Boolean expire(String key, Long time) { try { if (time > 0) { redisTemplate.expire(key, time, TimeUnit.SECONDS); } return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * 根据key获取过期时间 * * @param key 键 不能为 null * @return 时间(秒) 返回 0代表为永久有效

java之AQS和显式锁

China☆狼群 提交于 2020-03-23 09:46:55
  本次内容主要介绍AQS、AQS的设计及使用、 ReentrantLock、 ReentrantReadWriteLock以及手写一个可重入独占锁 1、什么是AQS ?    A QS,队列同步器AbstractQueuedSynchronizer的简写,JDK1.5引入的, 是用来构建锁或者其他同步组件的基础框架,它使用了一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作。AQS的作者Doug Lea大师期望它能够成为实现大部分同步需求的基础。 2、AQS的设计及其作用    AbstractQueuedSynchronizer是一个抽象类,先看一下其类图。   AQS中里有一个volatile修饰int型的state来代表同步状态,使用同步器提供的3个方法(getState()、setState(int newState)和compareAndSetState(int expect,int update))来改变状态,因为它们能够保证状态的改变是安全的。   AQS使用的是模板方法模式,主要使用方式是继承,且通常将子类推荐定义为静态内部类,子类通过继承AQS并实现它的抽象方法来管理同步状态。AQS自身没有实现任何同步接口,它仅仅是定义了若干同步状态获取和释放的方法来供自定义同步组件使用,同步器既可以支持独占式地获取同步状态

C# SqlHelper

天涯浪子 提交于 2020-03-23 08:48:01
singSystem;usingSystem.Collections.Generic;usingSystem.Configuration;usingSystem.Data;usingSystem.Data.SqlClient;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceCarHailing.Base{///<summary>///数据库帮助类///</summary>publicclassSqlHelp{///<summary>///创建一个已打开的连接///</summary>///<returns></returns>privatestaticSqlConnectionCreateConn(){SqlConnectionconn=newSqlConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);conn.Open();returnconn;}///<summary>///执行sql语句,返回受影响的行数///</summary>///<paramname="sql"></param>///<returns></returns>publicstaticintExecuteNonQuery

2019-06-04 Java学习日记之网络编程

假如想象 提交于 2020-03-21 08:16:40
网络编程三要素之IP概述: 每个设备在网络中的唯一标识 每台网络终端在网络中都要一个独立的地址,我们在网络中传输数据就是使用这个地址 ipconfig:查看本机IP ping:测试连接 本地回路地址:127.0.0.1 255.255.255.255是广播地址 IPv4:4个字节组成,4和0-255、大概42亿,30亿都在北美,亚洲4亿。2011年初已经用尽 IPv6:8组,每组4个16进制数 1a2b:0000:aaaa:0000:0000:0000:aabb:1f2f 1a2b::aaaa:0000:0000:0000:aabb:1f2f 1a2b:0000:aaaa::aabb:1f2f 1a2b:0000:aaaa::0000:aabb:1f2f 1a2b:0000:aaaa:0000::aabb:1f2f 网络编程三要素之端口号概述: 每个程序在设备上的唯一标识 每个网络程序都需要绑定一个端口号,传输数据的时候除了确定发到哪台机器上海要明确发到哪个程序 端口号范围从0-65535 编写网络应用就需要绑定一个端口号,尽量使用1024以上的,1024以下的基本上都被系统程序给占用了 常用端口   mysql:3306   oracle:1521   web:80   tomcat:8080   QQ:4000   feiQ:2425 网络编程三要素协议:

Android开发中蓝牙应用开发

ε祈祈猫儿з 提交于 2020-03-21 05:50:29
安卓开发中蓝牙应用也是比较常见的,那么现在整理下了蓝牙开发中的应用,现在来看安卓蓝牙开发浅析:   1. 使用蓝牙的响应权限   <uses-permission android:name="android.permission.BLUETOOTH" />   <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />   2. 配置本机蓝牙模块   在这里首先要了解对蓝牙操作一个核心类BluetoothAdapter   BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();   //直接打开系统的蓝牙设置面板   Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);   startActivityForResult(intent, 0x1);   //直接打开蓝牙   adapter.enable();   //关闭蓝牙   adapter.disable();   //打开本机的蓝牙发现功能(默认打开120秒,可以将时间最多延长至300秒)   discoverableIntent.putExtra(BluetoothAdapter.EXTRA

HttpClient使用详解

99封情书 提交于 2020-03-20 23:49:02
转载于:http://blog.csdn.net/wangpeng047/article/details/19624529 Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的 URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客户端发送Http请求变得容易,而且也方便了开发人员测试接 口(基于Http协议的),即提高了开发的效率,也方便提高代码的健壮性。因此熟练掌握HttpClient是很重要的必修内容,掌握 HttpClient后,相信对于Http协议的了解会更加深入。 一、简介 HttpClient是Apache Jakarta Common下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。 HttpClient已经应用在很多的项目中,比如Apache Jakarta上很著名的另外两个开源项目Cactus和HTMLUnit都使用了HttpClient。 下载地址: http://hc.apache.org/downloads.cgi 二、特性 1. 基于标准、纯净的java语言。实现了Http1.0和Http1.1 2. 以可扩展的面向对象的结构实现了Http全部的方法(GET, POST, PUT, DELETE, HEAD, OPTIONS

HttpClient使用详解

浪子不回头ぞ 提交于 2020-03-20 22:10:43
http://blog.csdn.net/wangpeng047/article/details/19624529 Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的 URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客户端发送Http请求变得容易,而且也方便了开发人员测试接 口(基于Http协议的),即提高了开发的效率,也方便提高代码的健壮性。因此熟练掌握HttpClient是很重要的必修内容,掌握 HttpClient后,相信对于Http协议的了解会更加深入。 一、简介 HttpClient是Apache Jakarta Common下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。 HttpClient已经应用在很多的项目中,比如Apache Jakarta上很著名的另外两个开源项目Cactus和HTMLUnit都使用了HttpClient。 下载地址: http://hc.apache.org/downloads.cgi 二、特性 1. 基于标准、纯净的java语言。实现了Http1.0和Http1.1 2. 以可扩展的面向对象的结构实现了Http全部的方法(GET, POST, PUT, DELETE, HEAD, OPTIONS,

异常情况(try,raise,traceback)

空扰寡人 提交于 2020-03-20 01:21:11
1.try ....except ....else 如果except后面没有加东西:就是捕获所有yichang except <异常名>:捕获指定异常 except <异常名> as <数据>: 捕获指定异常并将其赋给了<数据>;其中可以异常有多个,用元组表达 2.raise 引发异常 2.1 执行了raise后面的就不执行了 def printCount(count): if count == 100: raise ValueError print(count)# 例子中,当count==100时,会抛出ValueError 2.2 raise后面跟的语句,是有限制的,必须为Error或Exception类的子类 # python3中,dir(exceptions)不好用 import builtins dir(builtins) 2.3 raise后面可以是一个class、也可以是一个对象 def printCount(count): if count == 100: raise ValueError #这是class print(count) def printCount(count): if count == 100: raise ValueError("I am error") #这是ValueError的实例对象 print(count) 3 自定义一个异常类

Condition

非 Y 不嫁゛ 提交于 2020-03-20 00:22:02
Condition接口也提供了类似Object的监视器方法,与Lock配合可以实现等待/通知模式 condition对象是依赖于lock对象的,意思就是说condition对象需要通过lock对象进行创建出来(调用Lock对象的newCondition()方法) 三个线程依次打印abc 1 public class Demo { 2 3 private int signal; 4 Lock lock = new ReentrantLock(); 5 Condition a = lock.newCondition(); 6 Condition b = lock.newCondition(); 7 Condition c = lock.newCondition(); 8 9 public void a() { 10 lock.lock(); 11 while (signal != 0){ 12 try { 13 a.await(); 14 } catch (InterruptedException e) { 15 e.printStackTrace(); 16 } 17 } 18 19 System.out.println("a"); 20 signal ++; 21 b.signal(); 22 lock.unlock(); 23 } 24 25 public void b() {