线程与进程
进程: 是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间 线程: 是进程中的一个执行路径,共享一个内存空间,线程之间可以自由切换,并发执行. 一个进程 最少有一个线程 线程实际上是在进程基础之上的进一步划分,一个进程启动之后,里面的若干执行路径又可以划分成若干个线程 同步与异步 同步 : 排队执行 , 效率低但是安全 异步 : 同时执行 , 效率高但是数据不安全 并发与并行 并发 :指两个或多个事件在 同一个时间段内 发生。 并行 :指两个或多个事件在 同一时刻 发生(同时发生) 多线程技术 Java提供的用于实现线程的类:Thread 继承Thread实现线程(抢占式运行),在创建Thread对象后需要重写 run();方法(线程要执行的任务方法,此方法不能被直接调用,通过Thread对象的start();方法来启动任务。 实现Runnable接口 同样重写run();方法 Runnable更适合多个线程同时执行相同的任务的情况,避免了单继承的局限性。 守护线程:SetDaemon(true); 线程同步(解决线程不安全) 1.同步代码块 格式:synchronized(锁对象){ } 2.同步方法 在run();方法里面添加单独的方法,方法用synchronized修饰 3.显示锁 如: Lock lock = new reentrantlock(); lock.lock();//锁 lock.unlock();//解锁 先来先到是公平锁,大家一块抢是非公平锁。 显示锁:fair参数为true就表示为公平锁 如:Lock lock = new Reentrantlock(true); 线程6种状态: new:线程刚创建未启动 Runnble:正在执行 Blocked:排队状态 Waiting:无限等待状态 Timedwaitiiong:指定时间等待状态 Trminated:结束或退出线程 线程池: 缓存线程池:newCachedThreadPool(); 定长线程池:newFixedThreadPool();括号里面传固定长度 单线程线程池:newSingleThreadExecutor(); 周期定长线程池: 1. ScheduleExecutorService s = Executors.newSsheduledThreadPool(传入固定值 如:2) Service.schedule(new Runnable(){ },时间值秒如:5,Timeunit.SECONDS); 2. 周期性执行任务: 参数1:任务 参数2:延迟时长数字(第一次执行在什么时间以后) 参数3:周期时长数字(每隔多久执行一次) 参数4:时长数字的单位 如 方法ScheduleSAtFixedRate(new Runnable () { },5,1,Timunit.SECONDS); Lambda表达式,函数式编程思想 如: Thread t = new Thread(() -> System,out,println("史蒂夫"));


