线程
/**
* 进程:进程是由操作系统运行的,分配给一个程序内存的,并发的过程
* 线程:1.概念
* 由进程执行的,是存在与进程中的,一个进程可包含多个线程,没有分配内存的,而是本身有一个提供程序执行的堆栈的,并发的过程。
* 线程在切换时,比进程快很多。
* 2.线程的使用场合:完成多个任务的情况,例如下载文件
* 3.创建线程的方式:
* 第一种:继承Thread 不足之处:1。由于java是单继承,所以无法继承其他的类 2.继承线程必须重写run方法,导致线程执行必有耦合,致使执行效率下降
* 第二种:接口Runnable 优势: 1 可以多实现 2.单独定义执行文件 run 不会实现耦合
* 4.currentThread:查看当前调用的线程是谁。
* mian方法时jvm自己创建的,有名字mian,其他的大多没有其专门的名字:都是Thread-0......
* 5.join:void join()
* 概念:一旦调用该方法,调用该方法的线程进入阻塞态,直到调用该方法的所属线程执行完毕以后,才能执行。
* 用途:解决多个线程一起工作,导致的顺序问题
* 局部内部类:如果其中有变量,还要赋值,则将变量定义到方法的外面。
* 原因:局部内部类规定引用方法内的变量,必须是final的,而你却要再局部内部类中改变他的值,是不符合逻辑的。
* 6.守护线程:void setDaemon(booelean);
* 1.情况
* 当前台进程执行完毕以后,还有后台进程执行的话,也马上立即结束后台进程
* 如果守护线程执行完毕后,还有前台进程(mian中还有执行语句),那么守护进程就不会消失
* 使用后台进程设置必须再start前面
* 2.什么时候用后台进程呢?
* 就是当有死循环的时候,或者说是GC最适合。
* 7.阻断进程:static void yeild() 只要线程一执行他的话,当前线程就会阻塞,转给其他进程
* 8.CurrentThread:查看当前调用线程
* @author lei_l
*
*/
线程同步
/**
* 1线程并发造成的问题:并发造成多线程之间的竞争,他们之间抢占资源,导致线程执行顺序混乱,严重时导致程序奔溃。
* 2.解决的方法:引入线程同步 synchronized(一段同步锁/多段互斥锁)
* 2.1 原理及其规则:synchronized可以用来修饰方法,但是其作用域大了,会使并发效率变低,导致程序运行效率变低。所以synchronized块是更很高的选择
* 2.2 错误提示:
* 1)只有当前调用的方法才会能进去,此时门一锁。别的线程进来时就在这里排队等待。只有当线程出来时,才能进去
* 2)synchronized (this) 必须是一个对象才能型,不然new的话是给对象上带锁,不是给门上锁(是this不是t/new object的原因)
* 3)操作对象要是一至的:不能进两家店的试衣间。这个不是同步
* 4) 静态方法使用synchronized一定有同步效果的,不论对象是否一直,也没有new的要求
* 5)互斥锁原理:被synchronized修饰只要代码的对象相同,代码就互斥(例如:一个人不能又试衣服又结账)
* 3.线程安全:1)线程安全的:StringBuffer(同步, 多线程操作用他, 追加方式:synchronized append),vector,Hashtable
* 线程不安全:StringBuilder(不同步,单线程操作就用他, 追加方式:append),ArrayList,HashMap
* 解决线程不安全的方式:通过集合工具类获取安全线程-->Collections.synchronizedList()获取list集合的安全线程
* Coolections.synchronizedMap()获取map的安全线程
* 2)由于转化为线程安全后,一个对象调用其增删查改等方法存在互斥操作,所以再javaApi中规定:增删改等等操作都与遍历操作不互斥。需要自行维护其间的互斥关系。
*4.线程池: 1)作用:控制线程的数量 增加 线程的重用 (类似于公交车站调度)
* 2)何时用:大量线程创建销毁,重复调用时使用.
* 3)提供的线程池种类:(通过ExecutorService实现)
* Executor.newCashedThreadPool()-->可变线程池:兴建多个线程,可用时重复调用,不可用时会有一个待机时间将其停止销毁
* Executor.newFixedThreadPool()--->固定线程池: 只能创建呢么多,多了就等待排队空车.
* Executor.newSecheduledThreadPool()-->指定时间线程池:指定时间或者延后时间点执行线程
* Executor.newSingleThreadPool()-->单独线程:一个人工作
* @author lei_l
*
*/
public