1、 认识Thread和Runnable
Java中实现多线程有两种途径:继承Thread类或者实现Runnable接口。Runnable是接口,建议用接口的方式生成线程,因为接口可以实现多继承,况且Runnable只有一个run方法,很适合继承。在使用Thread的时候只需继承Thread,并且new一个实例出来,调用start()方法即可以启动一个线程。
Thread Test = new Thread();
Test.start();
在使用Runnable的时候需要先new一个实现Runnable的实例,之后启动Thread即可。
Test impelements Runnable;
Test t = new Test();
Thread test = new Thread(t);
test.start();
总结:Thread和Runnable是实现java多线程的2种方式,runable是接口,thread是类,建议使用runable实现java多线程,不管如何,最终都需要通过thread.start()来使线程处于可运行状态。
2、 认识Thread的start和run
1) start:
用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到spu时间片,就开始执行run()方法,这里方法run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程随即终止。
2) run:
run()方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码,这样就没有达到写线程的目的。
总结:调用start方法方可启动线程,而run方法只是thread的一个普通方法调用,还是在主线程里执行。
3、 线程状态说明
线程状态从大的方面来说,可归结为:初始状态、可运行状态、不可运行状态和消亡状态,具体可细分为上图所示7个状态,说明如下:
1) 线程的实现有两种方式,一是继承Thread类,二是实现Runnable接口,但不管怎样,当我们new了thread实例后,线程就进入了初始状态;
2) 当该对象调用了start()方法,就进入可运行状态;
3) 进入可运行状态后,当该对象被操作系统选中,获得CPU时间片就会进入运行状态;
4) 进入运行状态后case就比较多,大致有如下情形:
﹒run()方法或main()方法结束后,线程就进入终止状态;
﹒当线程调用了自身的sleep()方法或其他线程的join()方法,就会进入阻塞状态(该状态既停止当前线程,但并不释放所占有的资源)。当sleep()结束或join()结束后,该线程进入可运行状态,继续等待OS分配时间片;
﹒当线程刚进入可运行状态(注意,还没运行),发现将要调用的资源被锁牢(synchroniza,lock),将会立即进入锁池状态,等待获取锁标记(这时的锁池里也许已经有了其他线程在等待获取锁标记,这时它们处于队列状态,既先到先得),一旦线程获得锁标记后,就转入可运行状态,等待OS分配CPU时间片;
﹒当线程调用wait()方法后会进入等待队列(进入这个状态会释放所占有的所有资源,与阻塞状态不同),进入这个状态后,是不能自动唤醒的,必须依靠其他线程调用notify()或notifyAll()方法才能被唤醒(由于notify()只是唤醒一个线程,但我们由不能确定具体唤醒的是哪一个线程,也许我们需要唤醒的线程不能够被唤醒,因此在实际使用时,一般都用notifyAll()方法,唤醒有所线程),线程被唤醒后会进入锁池,等待获取锁标记。
﹒当线程调用stop方法,即可使线程进入消亡状态,但是由于stop方法是不安全的,不鼓励使用,大家可以通过run方法里的条件变通实现线程的stop。
作者: chuangxin01
分享到:
相关推荐
Java多线程编程是开发高并发应用的关键技术之一,它涉及到多个核心概念和方法。本文主要探讨了四个关键要点:Thread和Runnable的认识、Thread的start和run方法的区别、线程状态的说明以及Timer和TimerTask的使用。 ...
### Java多线程编程教程知识点概述 #### 一、操作系统中的线程与进程概念 - **进程**: 进程是操作系统进行资源分配和调度的基本单位,每个...通过这些知识点的学习,可以更好地理解和掌握Java多线程编程的技术要点。
### JAVA多线程案例教学详析 #### 一、引言 随着计算机技术的发展,多核处理器已经成为...通过上述介绍的学习资料,新入行的开发者可以快速掌握Java多线程编程的核心概念和技术实践,为进一步深入研究打下坚实的基础。
1. Java多线程学习(一)Java多线程入门 2. Java多线程学习(二)synchronized关键字(1) 3. Java多线程学习(二)synchronized关键字(2) 4. Java多线程学习(三)volatile关键字 5. Java多线程学习(四)...
"多线程编程" 多线程编程是指在同一个程序中同时...在本资源中,我们总结了多线程编程的知识点,包括线程的生命周期、多线程编程的要点、多线程编程定式等。这些知识点可以help我们更好地理解多线程编程的原理和应用。
Java多线程编程是开发高并发应用的关键技术之一,它涉及到如何有效利用系统资源,提高程序的执行效率。本文将详细讲解Java多线程程序编写的要点,包括线程的状态控制、优先级以及线程间通信。 首先,线程有五种基本...
Java多线程编程是Java开发中的一项重要技术,它允许程序同时执行多个任务,提高了系统效率和响应速度。然而,多线程环境下的编程也带来了一些挑战,如数据同步、线程安全等问题。本文将重点讨论Java多线程编程中需要...
使用Java多线程技术,可以在服务器端创建一个主线程,负责接收来自客户端的连接请求,并为每一个请求创建一个新的线程来处理客户端与服务器之间的通信。这样,服务器就可以同时处理多个客户端的请求,提高系统效率。...
### Java多线程实现控制台聊天室 #### 一、项目概述 本项目采用Java语言,利用多线程技术实现了一个简单的控制台聊天室。该聊天室具备基本的客户端与服务器端交互功能,用户可以通过控制台窗口进行文字聊天交流。 ...
在Java编程中,多线程是一项关键特性,它允许程序同时执行多个任务,极大地提高了效率。在本项目"java多线程实现-tcp端口扫描"中,我们利用多线程技术来加速...这就是"java多线程实现-tcp端口扫描"项目的核心技术要点。
线程之间的协作是多线程编程中的另一个关键方面,涉及到线程之间的通信和同步。Java提供了多种机制来实现这一点: 1. **Wait/Notify**: `Object.wait()`和`Object.notify()`用于线程之间的简单同步。 2. **...
在深入探讨Java多线程与并发库的高级应用之前,我们首先需要回顾一下Java多线程的基础概念和技术要点。 ##### 1.1 线程的概念 在计算机科学中,线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是...
多线程设计是Java编程中不可或缺的一部分,尤其在并发编程中起到至关重要的作用。以下是对多线程设计要点的详细讲解: 1. **内存模型**:JVM内存分为主内存和工作内存。主内存存储所有线程共享的数据,而工作内存则...
### Java多线程+Socket实现的漂亮QQ #### 技术要点分析 ##### 1. Java Swing Java Swing 是一个用于构建图形用户界面 (GUI) 的轻量级组件集,它为开发人员提供了丰富的功能来设计复杂的用户界面。在本项目中,...
通过上述内容的学习,开发者不仅能掌握Java并发编程的基本原理和技术要点,还能学会如何将这些理论应用于实际工作中,解决复杂的多线程问题。无论是对于初学者还是有一定经验的开发者来说,《Java并发编程实战》都是...
### Java多线程相关知识总结 #### 一、基本概念 多线程是现代编程语言中一项非常重要的特性,尤其在Java...以上就是关于Java多线程的基础知识总结,希望能帮助大家更好地理解和掌握Java多线程的相关概念和技术要点。