发表于: 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也可以省略



返回列表 返回列表
评论

    分享到