你回答的时候就要先说出有哪些创建线程的方式。既然他问了这么一个问题,说明里面肯定有一些注意点。你一定要把哪些注意点说出来。就ok了。
创建类A继承Thread类,重写Thread中的run()方法。
使用方法:
实例化类A。调用类A的start()方法。
注意点:调用start()方法,和直接调用实例run()方法的不同。调用start()方法相当于多线程调用。当直接调用run()方法时,会执行完run()方法后,才会向下执行。
创建类A实现Runable接口,重写Runable接口中的run()方法。
使用方法:
Runable里面没有start()方法。还得需要实例化一个Thread,并且包装类A。执行的时候也是通过Thread对象调用start()方法。
注意点:Runable是一个接口,接口里面没有实现方法。需要重新实例化Thread才能调用。
创建类A实现Callable接口。并重写call()方法。Callable接口带有一个泛型。
使用方法:
实例化实现类A,但是无法直接获取返回值,需要使用FutureTask
在外部封装一下再获取返回值。此外因为Runable是个接口,需要start()方法。因此需要实例化Thread类,然后包装FutureTask类。开启线程。 注意点:Runable是一个接口,需要Thread实例化包装。Runable无法接收返回值,需要FutureTask
进行包装。
使用ThreadPoolExecutor类进行创建线程池。
ThreadPoolExecutor的构造函数最多有七个参数。总共有四个构造函数
1、corePoolSize:线程池的核心线程数。
2、maximumPoolSize:线程池的最大线程数。
3、keepAliveTime:线程池空闲时线程的存活时间。
4、unit:线程存活时长单位,结合上个参数使用。
5、workQueue:存放任务的队列,使用的是阻塞队列。在这个方6、threadFactory:线程池创建线程的工厂。
7、handler:在队列和线程池达到最大线程数,都满时,仍热有任务的情况下的处理方式。
第一个构造方法,包含1,2,3,4,5,前5个参数。
第二个构造方法:包含1,2,3,4,5,6前6个参数。
第三个构造方法:包含1,2,3,4,5,7,参数。
第四个构造方法:包含所有参数。7个。
Executor大约有10个构造方法。
1、newCachedThreadPool:创建一个可以根据需要创建新线程的线程池,如果有空闲,优先使用空闲线程。
2、newFixedThreadPool:创建一个固定大小的线程池,在任何时候,最多只有N个线程在处理任务。
3、newSheduledThreadPool:能延迟执行,定时执行的线程池。
4、newWorkStealingPool:工作窃取,使用多个队列来减少竞争。
注意点: 允许的创建线程数量为Integer.MAX_VALUE,可能会创建大量线程,从而导致OOM
使用${}会有一个问题,当取得字符串类型的值时,没有加单引号。黑客可以
code = “1233 or code=456” password=“2123”:
select * from user where code=‘123’ or code=‘456’ and password=‘2123’ 进行攻击。
而使用#号,黑客就无法使用这样的攻击。
1、mysql经过查询后,会生成一个缓存。当下次查的时候,就很快返回来了。但是当sql语句里面有一些函数时,无法使用缓存。例如:NOW(),CURDATE()等函数。不会生成缓存。尽量不要使用函数,可以传过来一个值。
2、使用explain关键字分析你的查询语句或是表结构的性能瓶颈。
3、当只要一行数据时,使用limit 1提高查询效率,有了limit 1当数据库查询出来1条数据后,就不会再查询了。
4、为搜索字段添加索引。(这个字段经常用来做搜索)
1、唯一性太差的字段,不适合建索引。2、更新太频繁不适合建索引。3、不会出现在where条件中的字段不适合建索引,4、频繁使用的字段适合建索引。
5、为join字段添加索引。
6、不要使用select *
7、能使用ENUM类型的就不使用varchar字段
8、把ip地址存成UNSIGNED int(10)10位就行,可以使用inet_aton()函数将ip转数字,inet_ntoa()数字转ip
1、java.lang.*
2、java.util.*
3、java.io.*
4、java.net.*
5、java.sql.*
1、java.lang.NullPointerException空指针异常。
2、java.lang.ClassNotFoundException指定类型不存在异常
3、java.lang.ArrayIndexOutOfBoundsException数组越界异常。
4、java.lang.StackOverflowError:堆栈过深异常。
5、java.lang.ArithmeticException:数组运算异常。