java 中的多线程

java中实现多线程的方式有两种:

  1、实现继承Thread 类的类(重写run方法)

  2、实现Runnable 接口(重写run方法)

上述两种方式的关系;

看过jdk你会发现 Thread类是实现了 runnable的接口了的

  
可见,实现Runnable接口相对于继承Thread类来说,有如下显著的优势: (1)、 适合多个相同程序代码的线程去处理同一资源的情况,把虚拟CPU(线
程)同程序的代码、数据有效分离,较好地体现了面向对象的设计思想。 
(2)、 可以避免由于Java的单继承特性带来的局限。开发中经常碰到这样一种
情况,即:当要将已经继承了某一个类的子类放入多线程中,由于一个类不能同时有两个父类,所以不能用继承Thread类的方式,那么就只能采用实现Runnable接口的方式了。 
(3)、 增强了程序的健壮性,代码能够被多个线程共享,代码与数据是独立的。
当多个线程的执行代码来自同一个类的实例时,即称它们共享相同的代码。多个线程可以操作相同的数据,与它们的代码无关。当共享访问相同的对象时,即共享相同的数据。当线程被构造时,需要的代码和数据通过一个对象作为构造函数实参传递进去,这个对象就是一个实现了Runnable接口的类的实例。

java的任意一个程序都有一个缺省的主线程,主线程是main()方法。

任何线程都有5个状态。创建、就绪、运行、阻塞、终止。

备注:

1、 线程(thread)是指程序的运行流程。“多线程”的机制可以同时运行多个程序块,
使程序运行的效率更高,也解决了传统程序设计语言所无法解决的问题。 2、 如果在类里要激活线程,必须先做好下面两项准备: 
(1)、此类必须是扩展自Thread类,使自己成为它的子类。 (2)、线程的处理必须编写在run()方法内。 
3、 run()方法是定义在Thread类里的一个方法,因此把线程的程序代码编写在run()
方法内,所做的就是覆盖的操作。 
4、 Runnable接口里声明了抽象的run()方法,因此必须在实现Runnable接口的类里
明确定义run()方法。 
5、 每一个线程,在其创建和消亡之前,均会处于下列五种状态之一:创建、就绪、
运行、阻塞、终止。 
6、 暂停状态的线程可由下列的情况所产生: 
(1)该线程调用对象的wait()时。 (2)该线程本身调用sleep()时。 
(3)该线程和另一个线程join()在一起时。 7、 被冻结因素消失的原因有: 
(1)如果线程是由调用对象的wait()方法所冻结,则该对象的notify()方法被调用
时可解除冻结。 
(2)线程进入休眠(sleep)状态,但指定的休眠时间到了。 
8、 当线程的run()方法运行结束,或是由线程调用它的stop()方法时,则线程进入消
亡状态。 
9、 Thread类里的sleep()方法可用来控制线程的休眠状态,休眠的时间要视sleep()里
的参数而定。 
10、要强制某一线程运行,可用join()方法。 
11、join()方法会抛出InterruptedException的异常,所以编写时必须把join()方法编写
在try-catch块内。 
12、当多个线程对象操纵同一共享资源时,要使用synchronized关键字来进行资源的
同步处理

时间: 2024-09-29 22:57:44

java 中的多线程的相关文章

Java中的多线程你只要看这一篇就够了

Java中的多线程你只要看这一篇就够了 引 如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个话其实只有一半对,因为反应"多角色"的程序代码,最起码每个角色要给他一个线程吧,否则连实际场景都无法模拟,当然也没法说能用单线程来实现:比如最常见的"生产者,消费者模型". 很多人都对其中的一些概念不够明确,如同步.并发等等,让我

为什么Java中实现多线程的方式有两种?

在面试的过程中,我们经常问被面试者,为什么Java中实现多线程的方式有两种(一种是直接继承Thread类,一种是实现Runnable接口)?可惜的是,很多面试者都答不出来,甚至从来没有想为什么.,那么真正的原因是什么呢?我们可以用反证法推理一下: 假设Java只提供Thread供大家继承从而实现多线程,考虑下面的一个需求,如果有一个已经继承了某个父类的类,但是这个类又想实现多线程,怎么办?很显然,如果只提供一个可以继承的类,肯定解决不了这个问题.那么,如何解决,毫无疑问,就只能使用接口了.

Java中使用多线程、curl及代理IP模拟post提交和get访问

Java中使用多线程.curl及代理IP模拟post提交和get访问 菜鸟,多线程好玩就写着玩,大神可以路过指教,小弟在这受教,谢谢! [java] view plaincopyprint? /** * @组件名:javaDemo * @包名:javaDemo * @文件名:Jenny.java * @创建时间: 2014年8月1日 下午5:53:48 * @版权信息:Copyright ? 2014 eelly Co.Ltd,小姨子版权所有. */ package javaDemo; impo

Java中的 多线程编程

Java 中的多线程编程 一.多线程的优缺点 多线程的优点: 1)资源利用率更好2)程序设计在某些情况下更简单3)程序响应更快 多线程的代价: 1)设计更复杂虽然有一些多线程应用程序比单线程的应用程序要简单,但其他的一般都更复杂.在多线程访问共享数据的时候,这部分代码需要特别的注意.线程之间的交互往往非常复杂.不正确的线程同步产生的错误非常难以被发现,并且重现以修复. 2)上下文切换的开销当CPU从执行一个线程切换到执行另外一个线程的时候,它需要先存储当前线程的本地的数据,程序指针等,然后载入另

Java中的多线程=你只要看这一篇就够了

如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个话其实只有一半对,因为反应“多角色”的程序代码,最起码每个角色要给他一个线程吧,否则连实际场景都无法模拟,当然也没法说能用单线程来实现:比如最常见的“生产者,消费者模型”. 很多人都对其中的一些概念不够明确,如同步.并发等等,让我们先建立一个数据字典,以免产生误会. 多线程:指的是这个程序(一个进程)运

Java中使用多线程、curl及代理IP模拟post提交和get訪问

Java中使用多线程.curl及代理IP模拟post提交和get訪问 菜鸟,多线程好玩就写着玩.大神能够路过不吝赐教.小弟在这受教.谢谢! 很多其它分享请关注微信公众号:lvxing1788 ~~~~~~ 切割线扭起来 ~~~~~~ /** * @组件名:javaDemo * @包名:javaDemo * @文件名称:Jenny.java * @创建时间: 2014年8月1日 下午5:53:48 * @版权信息:Copyright ? 2014 eelly Co.Ltd,小姨子版权全部. */

黑马程序员【Java中的多线程】

Java中的多线程 首先,在开篇讲线程之前要说一个问题,我们知道多线程的执行原理是cpu在不同的线程中做着切换操作,而一提到多线程,大家首先想到的肯定是提高系统的运行效率,可是真的是这样的么?我们来借助一位大神博客中的代码就可以看出来有时单线程的运行效率要高于多线程: import threading from time import ctime class MyThread(threading.Thread): def __init__(self, func, args, name): thr

java中实现多线程的两种基本方法

java中实现多线程有两种基本方法,一种是继承Thread, 另一种是实现Runnable接口. 但是因为java中子类只能继承一个父类,如果采用继承Thread类,就不能继承其他类,很受限制. 以下是采用继承Thread类的例子: public class MyThreadTest{ public static void main(String[] args){ MyThread amythread1=new MyThread("my thread 1"); MyThread amy

Java中的多线程技术全面详解

本文主要从整体上介绍Java中的多线程技术,对于一些重要的基础概念会进行相对详细的介绍,若有叙述不清晰或是不正确的地方,希望大家指出,谢谢大家:) 为什么使用多线程 并发与并行 我们知道,在单核机器上,"多进程"并不是真正的多个进程在同时执行,而是通过CPU时间分片,操作系统快速在进程间切换而模拟出来的多进程.我们通常把这种情况成为并发,也就是多个进程的运行行为是"一并发生"的,但不是同时执行的,因为CPU核数的限制(PC和通用寄存器只有一套,严格来说在同一时刻只能