Java线程

 进程:

  1.操作系统中,并行执行的任务

  2.cpu时间被切分成一个一个小的时间片

  3.一个时间片上,只能处理一项任务

  线程: 进程内部并行执行的任务

 

线程创建方式:1.继承 Thread  2.实现 Runnable

线程状态:创建、可执行,执行、阻塞、消亡

方法:

  1.获得正在执行的线程对象

    Thread.currentThread()

  2.让线程暂停指定的毫秒时长

    Thread.sleep(毫秒时长)

  3.让步,放弃时间片

    Thread.yield()

  4.获取线程名:getName()  设置线程名:setName()

  5.启动线程,线程启动后,执行run()方法: start()

  6.打断一个线程的暂停状态,被打断的线程,会出现打断异常 InterruptedException: interrupted()

  7.当前线程暂停,等待被调用的线程结束: join()

  8.把线程设置成后台线程、守护线程 : setDeamon(true)  * 虚拟机回到等待所有前台线程都结束后,自动关闭    * 而不会等待后台线程结束

  9.获取线程优先级:getPriority() 设置线程优先级别:setPriority()  优先级 1 到 10 默认 5

 

多线程共享数据冲突问题

* 一个线程修改数据

* 另一个线程访问数据,可能访问到修改了一半的数据,称为“脏数据”

 

线程同步:synchronized

*  java任何对象,都有一个同步锁

*  synchronized 关键字,要求执行的线程,必须获得锁,才能执行

 

1.争夺指定对象的锁:

*  synchronized (对象) {

  ...}  

2.争夺当前对象的锁

synchronized void f() {.....}

3.争夺类对象的锁

static synchronized void f() {......}

*多线程 为了保证线程安全,必须降低效率,牺牲性能

 

生产者、消费者模型:是线程之间传递数据的一种方式

等待与通知:

  1.当前线程,在指定对象上等待:stack.wait

  2.在指定的对象上发送通知:

    stack.notify()  //通知所有线程中的一个

    stack.notifyAll()  //通知全部线程

  3.Object 中定义的方法:wait()  notify()  notifyAll()

*  必须在同步代码块内才能调用

*  必须在加锁的对象上等待

*  wait()外面,通常是一个循环条件检查

 

同步监视器模型:执行到synchronized,会在加锁的对象上,关联一个同步监视器对象

  

 

posted @ 2018-11-21 21:37  SmillingTeressa  阅读(67)  评论(0)    收藏  举报