位置:重庆中公优就业IT培训机构 > 学校动态 > 怎样理解Java经典问题方法
以下是小编为大家整理IT培训知识点怎样理解Java经典问题方法的内容。
创建线程的方式
比较常见的一个问题了,一般就是两种:
(1)继承Thread类
(2)实现Runnable接口
至于哪个好,不用说肯定是后者好,因为实现接口的方式比继承类的方式更灵活
也能减少程序之间的耦合度,面向接口编程也是设计模式原则的核心。
3、start()方法和run()方法的区别
只有调用了start()方法,才会表现出多线程的特性
不同线程的run()方法里面的代码交替执行。
如果只是调用run()方法,那么代码还是同步执行的
必须等待一个线程的run()方法里面的代码全部执行完毕之后
另外一个线程才可以执行其run()方法里面的代码。
Runnable接口和Callable接口的区别
有点深的问题了,也看出一个Java学习知识的广度。
Runnable接口中的run()方法的返回值是void
它做的事情只是纯粹地去执行run()方法中的代码而已
Callable接口中的call()方法是有返回值的,是一个泛型
和Future、FutureTask配合可以用来获取异步执行的结果。
这其实是很有用的一个特性,因为多线程相比单线程更难
更复杂的一个重要原因就是因为多线程充满着未知性,某条线程是否执行了
某条线程执行了多久
某条线程执行的时候我们期望的数据是否已经赋值完毕
无法得知,我们能做的只是等待这条多线程的任务执行完毕而已。
而Callable+Future/FutureTask却可以获取多线程运行的结果
可以在等待时间太长没获取到需要的数据的情况下取消该线程的任务。
Volatile关键字的作用
一个非常重要的问题,是每个学习、应用多线程的Java程序员都必须掌握的。
理解volatile关键字的作用的前提是要理解Java内存模型,这里就不讲Java内存模型了
可以参见第31点,volatile关键字的作用主要有两个:
(1)多线程主要围绕可见性和原子性两个特性而展开,使用volatile关键字修饰的变量
增加了其在多线程之间的可见性,即每次读取到volatile变量,一定是的数据
(2)代码底层执行不像我们看到的语言—-Java程序这么简单
它的执行是Java代码–>字节码–>根据字节码执行对应的C/C++代码
–>C/C++代码被编译成汇编语言–>和硬件电路交互
现实中,为了获取更好的性能JVM可能会对指令进行重排序
多线程下可能会出现一些意想不到的问题。
使用volatile则会对禁止语义重排序,当然这也一定程度上降低了代码执行效率
从实践角度而言,volatile的一个重要作用就是和CAS结合,增加了原子性
详细的可以参见java.util.concurrent.atomic包下的类,比如AtomicInteger。
尊重原创文章,转载请注明出处与链接:http://www.peixun360.com/3179/news/214523/违者必究! 以上就是重庆中公优就业IT培训机构 小编为您整理 怎样理解Java经典问题方法的全部内容。