stream
线程和线程并发
1.线程和进程的区别? 进程是资源分配的最小单位 线程是程序执行的最小单位 一个进程可以有多个线程组成,多线程共享数据就会造成线程不安全问题。 解决线程安全问题,尽力避免资源共享问题。 2.创建线程的方式 继承Thread类 重写run方法,自己实现业务逻辑 使用start启动线程。 实现Runnable接口 覆写run方法,然后将 实现callable接口,需要返回值的时候,使用 实现call方法 要区别run和start,通过start启动起来。线程需要抢占CPU资源,获取到资源的时候,再运行 3.线程的生命周期(自己能画) 。 4.线程同步 只有多线程访问共同资源的时候,就会出现线程安全问题 解决方案就是:对资源进行加锁 synchronized 可以添加在方法和类上面。 不需要自己进行解锁 是JVM级别的,JVM发现有此修饰符会使用monitor进行监视,当monitor被占用的时候,就会被锁定。有此标签标示资源被占用。 Lock (属于concurrent包下的) 是java代码级别的,我们认为可以进行一个控制,使用完毕之后,需要手动释放锁。未放,就容易造成死锁。 尽量避免线程安全的问题,即 ①避免类级别的共享的变量。如:变量尽量是小范围的,避免使用类级别的变量。 ②添加同步或锁,锁住资源 ③使用ThreadLocal,解决多线程的并发安全问题(当前线程作为一个key,传入的值作为value,不同的key线程对应不同的value,实现了线程的隔离) 内部使用的是map来存取,为每个线程创建一个副本,map内部存放的的是,每一个线程进入都会创建了一个map,通过map就将线程之间隔离开了。获取资源的时候,通过map内部的key,获取对应的value 。 5、线程池 在excutor内上面,注意有些0,表示是没有限制