Java多线程与传统线程之间的区别

开发 后端
Java多线程不断的进行相关语言的改进,下面我们就来看看如何才能更好的进行相关问题的学习。希望大家能够有所收获。

Java多线程在使用的过程中一直都不知道如何才能更加的完善呢?这个问题需要我们大家不断的进行学习和研究。下面我们就来详细的学习下相关问题的解决方案。

Java语言中有一个重要的特性是支持Java多线程。Java多线程是java的一项高级技术,它涉及到操作系统里面的知识,层次贴近系统层面。对于普通程序员一般很少碰它。而且目前就是在java EE(原来的J2EE)的相关框架里,对线程这个东西都是尽量回避。程序员最理想的状态是专注业务逻辑,而不是天天想着线程这个东西怎么写。

思考一个问题程序的本质是什么?是CPU的指令序列的集合。到底什么顺序是程序员编写的让计算机赋值,它就赋值、写个循环它就循环、写个分支语句它就分支、写个跳转它就跳转。每个指令流就是一个线程,并发执行多个指令流就是Java多线程。大家想,只有一个CPU怎么可能同时发出多个指令流呢?是的,并发只是“逻辑”上的,物理上是不可能的除非是两个以上的CPU。

Java多线程和传统的单线程的区别是由于各个线程的控制流彼此独立,使得各个线程之间的代码是乱序执行的,出现了并发访问带来的一切问题。正像是三个和尚的故事,和尚多了未必是好事。也就是刚才说的,程序员一般都不让他们碰这个东西。

在java中如何写线程呢,在java中就是很简单了。有两种方法:第一、继承java.lang.Thread第二、实现Runnable接口。实践:

继承Thread而重写了run()方法

  1. public class Hello extends Thread{  
  2. int i;  
  3. public void run(){  
  4. while(true){  
  5. System.out.println("Hello "+i++);  
  6. if(i==10) break;  
  7. }}}  
  8. public class HelloThread {  
  9. public static void main(String[] args){  
  10. Hello h1 = new Hello();  
  11. Hello h2 = new Hello();  
  12. h1.start(); //用两个线程执行那10次循环  
  13. h2.start();  
  14. }} 上面的例子是第一种方法,下面是第二种方法  
  15. public class TestThread {  
  16. public static void main(String args[]) {  
  17. Xyz r = new Xyz();  
  18. Xyz r1 = new Xyz();  
  19. Thread t1 = new Thread(r);  
  20. Thread t2 = new Thread(r1);  
  21. t1.start();//用两个线程执行那50次循环  
  22. t2.start();   
  23. }} //实现Runnable接口  
  24. class Xyz implements Runnable {  
  25. int i;  
  26. public void run() {  
  27. i = 0;  
  28. while (true) {  
  29. System.out.println("Hello " + i++);  
  30. if ( i == 50 ) {  
  31. break;  
  32. }}}}  

上面两种方法继承Thread类,Java多线程是比较简单的,代码也比较少。但是我们不提倡使用这种方法。而第二种实现Runnable接口,更符合面向对象思想,Thread是把虚拟的CPU看成一个对象,封装了CPU的细节。但是Thread的构造线程的子类的方法中与CPU不相关,没有必要把CPU的细节都继承来。而实现Runnable则不影响java.lang.Thread的体系。而且便于其它类的继承。

Java多线程发的代码和数据的执行顺序混乱,我们也需要自己调度和控制它们。请看附加教程,线程调度和并发。

【编辑推荐】

  1. Java多线程同步具体实例讲解
  2. Java多线程语句具体分类的详细介绍
  3. Java多线程如何防止主线的阻塞
  4. Java多线程中wait语句的具体使用方法
  5. Java多线程如何解决关键字封锁问题
责任编辑:张浩 来源: 博客园
相关推荐

2010-03-01 13:28:44

Python子线程

2021-12-26 18:22:30

Java线程多线程

2010-01-21 11:25:44

linux多线程线程资源

2021-12-28 09:10:55

Java线程状态

2011-06-22 16:02:37

Qt 多线程 重入

2021-12-14 08:28:08

Java多线程线程

2019-05-09 15:00:04

机器学习深度学习人工智能

2010-03-18 16:02:09

python 多线程

2017-05-08 11:46:15

Java多线程

2017-05-31 14:03:07

Java多线程内置锁与显示锁

2011-06-22 16:08:40

Qt 多线程 事件循环

2021-02-25 15:58:46

C++线程编程开发技术

2024-06-24 12:57:09

多线程C++编程语言

2021-03-05 07:38:52

C++线程编程开发技术

2019-06-03 09:13:11

线程进程多线程

2018-11-28 09:53:50

游戏服务器线程

2009-06-17 11:23:00

Java多线程

2013-06-07 16:30:08

iOS多线程iOS开发NSThread

2022-05-26 08:31:41

线程Java线程与进程

2017-05-27 20:59:30

Java多线程synchronize
点赞
收藏

51CTO技术栈公众号