A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© TheBadboy 中级黑马   /  2015-8-17 19:48  /  552 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

多线程:
        进程: 就是正在执行的程序
        多进程的意义:        是为了提高CPU的使用率

        线程:
                一个程序中存在多个任务,而每一个任务就是一个线程

        多线程的意思: 提高程序的使用率
        多线程在执行的时候都是在抢占CPU的时间片(CPU的执行权), 谁抢占到CPU的执行权,CPU就执行谁

        JVM的运行原理:
                我们使用java启动程序,其实是启动了JVM,这样就相当于启动了一个进程,而在这个进程中自动启动了一个线程
                这个线程就是主线程,来通过这个线程调用main方法,执行main方法的方法体
        JVM的启动是多线程的吗?
                是.jvm在运行的时候至少启动了两个线程,一个是主线程,一个是垃圾回收线程

        线程的调度和线程优先级
                调度模型:
                        分时调度模型:                就是为每一个线程分配指定的时间
                        抢占式调度模型:                优先去执行优先级较高的线程
                                                java语言采用的就是抢占式调度模型
                线程的优先级:
                        如何来获取线程的优先级:
                                public final int getPriority() 返回线程的优先级。
                        如何给线程设置优先级:
                                public final void setPriority(int newPriority):        更改线程的优先级。
                        线程的优先级存在一个范围: 这个范围是1-10
                        如果我们没有给线程设置优先级那么使用的就是默认的优先级: 5
        线程的控制
                休眠 (掌握)
                        public static void sleep(long millis)  throws InterruptedException
                加入
                        public final void join() throws InterruptedException等待该线程终止。
                        注意事项:
                                必须是在启动之后,在调用该方法
                礼让
                        public static void yield()暂停当前正在执行的线程对象,并执行其他线程。
                守护
                        public final void setDaemon(boolean on)将该线程标记为守护线程或用户线程。
                终止
                        public final void stop(): 终止线程
                        public void interrupt():  中断线程。

                stop和interrupt的区别:
                        stop: 表示的意思是终止该线程
                        interrupt: 将线程的阻塞状态中断
       
        创建线程的两种方法:
                第一种方式:
                        步骤:
                                a: 创建一个类然后让这个类继承Thread
                                b: 复写run方法
                                c: 创建a中的类的对象
                                d: 启动线程, 启动线程使用的是start方法

                                可以使用getName方法获取线程名称
                                可以使用setName方法设置线程名称
                第二种方式:
                        步骤:
                                a: 创建一个类,然后让这个类实现Runnable接口
                                b: 复写run方法
                                c: 创建a中的类的对象
                                d: 创建Thread类的对象,把C中的对象作为参数传递进来
                                e: 启动线程

                                现获取当前正在执行的线程
                                Thread.currentThread()然后在调用getName方法获取
                                通过构造方法设置名称设置线程名称
               

        卖票的案例

        同步代码块:
                synchronized(对象){
                        需要被同步的代码 ;
                }
        不同代码块保证同步的关键是在这个对象上.要求使用同一个对象. 这个对象看以看做成一个锁.
        好处:        可以保证数据的安全性
        弊端:        每一个线程都需要判断这个同步锁,所以效率比较低

        同步代码块以及同步方法和静态同步方法的锁对象?

        同步代码块:        锁是任意的对象
        同步方法:        锁对象是this
        静态同步方法:        该类对象的字节码文件对象

        每一种数据类型都存在一个静态的class属性,可以用来获取当前类的字节码文件对象

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马