发表于: 2017-07-25 22:57:33
1 852
多线程:
线程可以称作为一个微观的进程,一个进程至少包括一个线程,但是也可能包括多线程
thread,线程的意思
线程是由操作系统支持的,线程的话是有优先级的
查看线程优先级:
linux中是1-7,windows中为1-10,默认为5
getPriority()方法查看
线程优先级高不一定会先执行
优先级最好不要设置int类型,最好调用thread中的静态方法
局部变量会不会有线程安全问题
每一个线程都有一个对应的方法栈,方法栈是不会存在线程安全,所以局部变量不会有线程安全
但是全局变量放在堆内存,会存在线程安全问题
主线程会等待子线程执行完毕再结束
多个线程同时操作一个对象时,如果没有外界的影响,这个对象的行为始终是一个正确的行为,就称之为线程安全的
sleep 休眠 当前线程持有的cpu的执行权限没有释放
wait 在线程等待的过程中 cpu的执行权限被释放
-----------------------------------------------------
生产者和消费者模型:
简单的说是分为两块,一块负责生产,另一块负责消费,就像吃自助餐,顾客只管吃,东西没了就等厨子烧。
因此可以简单分为四个基本模型:
1.请求 食物
2.制造请求者 厨师
3.消费请求者 消费者
4.容器 放食物的台子
关于代码的实现:
厨师可以多个---意味着可以使用多个线程
厨子需要把烧好的菜放在台子上,顾客需要从台子上拿菜----意味着共享容器
怎么才能保证是一个容器?----单例模式
懒汉式:什么时候用什么时候创建
饿汉式:一上来就先创建
这个容器一定要指定容积,也就是容器中商品存放的最大数量
notifyAll(),唤醒所有等待的线程运行。
synchronized是Java中的关键字,是一种同步锁。当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。
还有wait(),wait 是Object 类的方法,对此对象调用wait 方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify 方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
这三个东西很重要
uuid:指的是唯一字符串,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的
并发环境下建议选用并发容器
同步:同一时刻只能有一个线程
异步:同一时刻能有多个线程
----------------------------------------------------
jkd1.8的新特性
lambda表达式
他是一个匿名函数,可以把它理解为一端可以传递的代码,将代码像数据一样传递
它引用于接口,这个接口的抽象方法只能有一个
比如:
Runnable runnable = ()->{system.out.println("aaa");}
代替匿名内部类
()代表的是入参 如果是空的 表示没有入参
{}表示的是方法的执行体
他能重写方法,重写的是接口中唯一一个抽象方法
关于入参:
入参可以不指定的,因为在编译期间会进行自动的匹配
关于返回值
如果只有一行代码,那么{}可以省略,甚至return也可以省略
评论