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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


马上有
回复 使用道具 举报
马上有!!
回复 使用道具 举报
学习学习!
回复 使用道具 举报
没学到的能给点不?
回复 使用道具 举报

没学到的能给点不?
回复 使用道具 举报
进程和线程
1,进程:是一个正在执行中的程序
        每一个进程执行都有一个执行顺序,该顺序是一个执行路径,或者叫一个控制单元

2,线程:进程中的一个独立的控制单元
        线程在控制着进程的执行

3,一个进程中至少有一个线程

4,java的进程:java vm 启动的时候会有一个进程java.exe,该进程中至少有一个线程负责java程序的执行,而且这个线程运行的代码存在于main方法中。该线程称之为主线程。

5,多线程的作用:多段代码同时执行,提高效率
回复 使用道具 举报
2,发现运行结果每一次都不同
因为多个线程都获取cpu的执行权,cpu执行到谁,就运行谁
明确一点,在某一时刻,只能有一个程序在运行(多核除外)
cpu在做着快速的切换,以达到看上去是同时运行的效果

我们可以形象的把多线程的运行形容为在互相抢夺cpu的执行权

这就是多线程的一个特性:随机性,也就是谁抢到,谁执行,至于执行多长时间,目前cpu决定
回复 使用道具 举报
实现方式和继承方式有什么区别?
实现方式的好处:避免了单继承的局限性
在定义线程的时候,建议使用实现方式
两种方式的区别:线程代码存放的位置不同
继承Thead:线程代码存放在Thread子run方法中
实现Runnable:线程代码存放在接口的子类的run方法
回复 使用道具 举报
7,安全问题:当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完,另一个线程参与进来执行,导致共享数据的错误

解决办法:对多条操作共享数据的语句,只能让一个线程都执行完,在执行过程中,其他线程不可以参与执行

java对于多线程的安全问题提供了专业的解决方式:同步代码块
synchronized(任意对象)

        需要被同步的代码;


对象如同锁,持有锁的线程可以在同步中执行
不持有锁的线程即使获取了cpu的执行权,也进不去
例子:火车上的卫生间--经典

同步的前提:第一,必须要有两个或者两个以上的线程;第二,必须是多个线程使用同一个锁
必须保证同步中只有一个线程在运行

好处:解决了多线程的安全问题
弊端:多个线程需要判断锁,较为消耗资源

如何查找多线程中的安全问题:
第一,明确哪些代码是多线程运行代码
第二,明确共享数据
第三,明确多线程运行代码中哪些是操作共享数据的

同步的两种体现形势:同步代码块和同步函数两种,其中同步函数就只要在定义函数的函数名前面加上synchronized即可,连建立对象的过程都省了。

那么同步函数用的是哪一个锁呢?
函数需要被对象调用,函数都有一个所属对象的引用,就是this
所以同步函数使用的锁是this

如果同步函数被静态以后,使用的锁:不是this,因为静态方法中也不可以定义this
静态进内存的时候,内存中没有本类对象,但是一定有该类对应的字节码文件对象。
类名.class,该对象的类型是Class
静态的同步方法,使用的锁是该方法所在类的字节码文件对象:类. Class
回复 使用道具 举报
什么时候再搞搞这样的活动啊
回复 使用道具 举报
pray 高级黑马 2014-4-25 21:40:36
911#
这个活动挺好,沙发
回复 使用道具 举报
解我燃眉之急
回复 使用道具 举报
学习学习!
回复 使用道具 举报
这命中率 呵呵
回复 使用道具 举报
版主刚看到这个活动 所以来试试运气

多线程基础.rar

152.93 KB, 下载次数: 69

回复 使用道具 举报
这个我还没学到,我在学对象,求分
回复 使用道具 举报
学习学习!
回复 使用道具 举报
学习学习!
回复 使用道具 举报
学习学习!
回复 使用道具 举报
学习学习!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马