码迷,mamicode.com
首页 > 编程语言 > 详细

多线程&线程同步

时间:2016-05-04 19:17:04      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:java基础

线程

    程序执行过程中,并发执行的代码段.

    线程之间可以共享内存.


线程安全

    增加了同步处理,确保在同一时刻,只有一个线程执行同步代码.

    保证线程安全的方法就是锁机制 java中的任何对象都可以作为锁对象 

        synchronized(lock){....} 代码块中的代码被确保同一时间只有一个线程才能执行

    同步方法是用当前对象作为同步对象(this)

        public synchronized int getTicket(){...} synchronized关键字也能加在方法上 确保同一时间只有一个线程才能访问该方法

    静态方法可以加同步处理,使用class作为同步对象.


创建线程方式

    继承Thread类

    1.子类覆盖父类中的run方法,将线程运行的代码存放在run中.

    2.建立子类对象的同时,线程也被创建.

    3.通过调用start方法开启线程.     

    Thread.currentThread() //得到当前的执行线程

    yield() //让线程放弃cpu的抢占权                                                                                                                       

    sleep(int 毫秒数) / 让线程休眠指定的毫秒数

同步的前提

   1.同步需要两个或者两个以上的线程.

    2.多个线程使用的是同一个锁.

    未满足以上两个条件,不能称其为同步.

同步的弊端

    当线程相当多时,因为每个线程都会去判断同步上的锁,这是很耗费资源的,无形中会降低程序的运行效率.

线程间通信

    思考1:wait(),notify(),notifyAll(),用来操作线程为什么定义在了Object类中?

        1.这些方法存在于同步代码中.

        2.使用这些方法时必须要标识所属的同步锁

        3.锁可以是任意对象,所以任意对象调用的方法一定定义在Object类中.

    思考2:wait(),sleep()有什么区别?

        wait():释放cpu执行权,释放锁

        sleep():释放cpu执行权,不释放锁

    

守护线程案例

    有两个玩家和一个服务员 玩家在玩的过程中 服务员需要每隔一秒报时 当玩家退出后 服务员也退出

在这里 服务员的线程就是守护线程(为其它线程提供服务的线程) 当玩家玩完后就设置其线程为守护线程 如果所有的线程都是守护线程

程序就会自动退出.

技术分享


技术分享

技术分享


多线程&线程同步

标签:java基础

原文地址:http://pwitachi.blog.51cto.com/5057345/1770093

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!