Java多线程编程学习

=Start=

缘由:

学习整理一下Java中多线程编程的样例代码,方便以后使用。

正文:

参考解答:
一个线程完整的生命周期:
一个Java线程的生命周期
Java 提供了三种创建线程的方法:
  • 通过实现 Runnable 接口;
  • 通过继承 Thread 类本身;
  • 通过 Callable 和 Future 创建线程。
代码样例:

&

&

单线程对比测试——new一个常规的class

上面这段代码的main()方法中的print语句将永远无法得到执行,因为该程序是一个单线程程序,当调用MyThread类的run()方法时,会遇到死循环,循环将一直进行。

下面这一段代码相比而言就是多了一个extends继承,就不会出现上面的那个情况:

 

多线程使用的注意事项:
  • 有效利用多线程的关键是理解程序是并发执行而不是串行执行的。例如:程序中有两个子系统需要并发执行,这时候就需要利用多线程编程。
  • 通过对多线程的使用,可以编写出非常高效的程序。不过请注意,如果你创建太多的线程,程序执行的效率实际上是降低了,而不是提升了。
  • 请记住,上下文的切换开销也很重要,如果你创建了太多的线程,CPU 花费在上下文的切换的时间将多于执行程序的时间!
参考链接:

=END=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/3968.html

《Java多线程编程学习》上有1条评论

  1. Java面试:投行的15个多线程和并发面试题
    http://www.importnew.com/29562.html
    https://dzone.com/articles/top-15-java-multithreading-concurrency-interview-q

    1. 现在有线程 T1、T2 和 T3。你如何确保 T2 线程在 T1 之后执行,并且 T3 线程在 T2 之后执行?

    2. Java 中新的 Lock 接口相对于同步代码块(synchronized block)有什么优势?如果让你实现一个高性能缓存,支持并发读取和单一写入,你如何保证数据完整性。

    3. Java 中 wait 和 sleep 方法有什么区别?

    4. 如何在 Java 中实现一个阻塞队列?

    5. 如何在 Java 中编写代码解决生产者消费者问题?答案

    6. 写一段死锁代码。你在 Java 中如何解决死锁?

    7. 什么是原子操作?Java 中有哪些原子操作?

    8. Java 中 volatile 关键字是什么?你如何使用它?它和 Java 中的同步方法有什么区别?

    9. 什么是竞态条件?你如何发现并解决竞态条件?

    10. 在 Java 中你如何转储线程(thread dump)?如何分析它?

    11. 既然 start() 方法会调用 run() 方法,为什么我们调用 start() 方法,而不直接调用 run() 方法?

    12. Java 中你如何唤醒阻塞线程?

    13. Java 中 CyclicBarriar 和 CountdownLatch 有什么区别?

    14. 什么是不可变类?它对于编写并发应用有何帮助?

    15. 你在多线程环境中遇到的最多的问题是什么?你如何解决的?

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Read more, Write more, Think more, Know more.