java多线程都有几种方式实现??
java中实现多线程的方法有两种,1:继承Tread类;2:实现Runable接口<pre t="code" l="java">1、
public class MyThread extends Thread{
//重写run()方法
public void run(){
//多线程要做的事
}
public static void main(String args[]){
MyThread m1 = new MyThread();
MyThread m2 = new MyThread();
m1start();
m2start();
}
}
2、
public class NThread implements Runable{
//实现run()方法
public void run(){
//多线程要做的事
}
public static void main(String args[]){
NThread nt = new NThread();
new Thread(nt,"nt1_name")start();
new Thread(nt,"nt2_name")start();
}
}
进程是程序在处理机中的一次运行。一个进程既包括其所要执行的指令,也包括了执行指令所需的系统资源,不同进程所占用的系统资源相对独立。所以进程是重量级的任务,它们之间的通信和转换都需要操作系统付出较大的开销。
线程是进程中的一个实体,是被系统独立调度和分派的基本单位。线程自己基本上不拥有系统资源,但它可以与同属一个进程的其他线程共享进程所拥有的全部资源。所以线程是轻量级的任务,它们之间的通信和转换只需要较小的系统开销。
Java支持多线程编程,因此用Java编写的应用程序可以同时执行多个任务。Java的多线程机制使用起来非常方便,用户只需关注程序细节的实现,而不用担心后台的多任务系统。
Java语言里,线程表现为线程类。Thread线程类封装了所有需要的线程操作控制。在设计程序时,必须很清晰地区分开线程对象和运行线程,可以将线程对象看作是运行线程的控制面板。在线程对象里有很多方法来控制一个线程是否运行,睡眠,挂起或停止。线程类是控制线程行为的唯一的手段。一旦一个Java程序启动后,就已经有一个线程在运行。可通过调用ThreadcurrentThread方法来查看当前运行的是哪一个线程。
class ThreadTest{
public static void main(String args[]){
Thread t = ThreadcurrentThread();
tsetName("单线程"); //对线程取名为"单线程"
tsetPriority(8);
//设置线程优先级为8,最高为10,最低为1,默认为5
Systemoutprintln("The running thread: " + t);
// 显示线程信息
try{
for(int i=0;i<3;i++){
Systemoutprintln("Sleep time " + i);
Threadsleep(100); // 睡眠100毫秒
}
}catch(InterruptedException e){// 捕获异常
Systemoutprintln("thread has wrong");
}
}
}
多线程的实现方法
继承Thread类
可通过继承Thread类并重写其中的run()方法来定义线程体以实现线程的具体行为,然后创建该子类的对象以创建线程。
在继承Thread类的子类ThreadSubclassName中重写run()方法来定义线程体的一般格式为:
public class ThreadSubclassName extends Thread{
public ThreadSubclassName(){
// 编写子类的构造方法,可缺省
}
public void run(){
// 编写自己的线程代码
}
}
用定义的线程子类ThreadSubclassName创建线程对象的一般格式为:
ThreadSubclassName ThreadObject =
new ThreadSubclassName();
然后,就可启动该线程对象表示的线程:
ThreadObjectstart(); //启动线程
应用继承类Thread的方法实现多线程的程序。本程序创建了三个单独的线程,它们分别打印自己的“Hello World!”。
class ThreadDemo extends Thread{
private String whoami;
private int delay;
public ThreadDemo(String s,int d){
whoami=s;
delay=d;
}
public void run(){
try{
sleep(delay);
}catch(InterruptedException e){ }
Systemoutprintln("Hello World!" + whoami
+ " " + delay);
}
}
public class MultiThread{
public static void main(String args[]){
ThreadDemo t1,t2,t3;
t1 = new ThreadDemo("Thread1",
(int)(Mathrandom()2000));
t2 = new ThreadDemo("Thread2",
(int)(Mathrandom()2000));
t3 = new ThreadDemo("Thread3",
(int)(Mathrandom()2000));
t1start();
t2start();
t3start();
}
}
实现Runnable接口
编写多线程程序的另一种的方法是实现Runnable接口。在一个类中实现Runnable接口(以后称实现Runnable接口的类为Runnable类),并在该类中定义run()方法,然后用带有Runnable参数的Thread类构造方法创建线程。
创建线程对象可用下面的两个步骤来完成:
(1)生成Runnable类ClassName的对象
ClassName RunnableObject = new ClassName();
(2)用带有Runnable参数的Thread类构造方法创建线程对象。新创建的线程的指针将指向Runnable类的实例。用该Runnable类的实例为线程提供 run()方法---线程体。
Thread ThreadObject = new Thread(RunnableObject);
然后,就可启动线程对象ThreadObject表示的线程:
ThreadObjectstart();
在Thread类中带有Runnable接口的构造方法有:
public Thread(Runnable target);
public Thread(Runnable target, String name);
public Thread(String name);
public Thread(ThreadGroup group,Runnable target);
public Thread(ThreadGroup group,Runnable target,
String name);
其中,参数Runnable target表示该线程执行时运行target的run()方法,String name以指定名字构造线程,ThreadGroup group表示创建线程组。
用Runnable接口实现的多线程。
class TwoThread implements Runnable{
TwoThread(){
Thread t1 = ThreadcurrentThread();
t1setName("第一主线程");
Systemoutprintln("正在运行的线程: " + t1);
Thread t2 = new Thread(this,"第二线程");
Systemoutprintln("创建第二线程");
t2start();
try{
Systemoutprintln("第一线程休眠");
Threadsleep(3000);
}catch(InterruptedException e){
Systemoutprintln("第一线程有错");
}
Systemoutprintln("第一线程退出");
}
public void run(){
try{
for(int i = 0;i < 5;i++){
Systemoutprintln(“第二线程的休眠时间:”
+ i);
Threadsleep(1000);
}
}catch(InterruptedException e){
Systemoutprintln("线程有错");
}
Systemoutprintln("第二线程退出");
}
public static void main(String args[]){
new TwoThread();
}
}
程序运行结果如下:
正在运行的线程: Thread[第一主线程,5,main
创建第二线程
第一线程休眠
第二线程的休眠时间:0
第二线程的休眠时间:1
第二线程的休眠时间:2
第一线程退出
第二线程的休眠时间:3
第二线程的休眠时间:4
第二线程退出
java语言有哪些特点java语言的主要特点是什么,相信学习java的朋友都想要深入的了解。
1、easy:java的语法比c++的相对简单,另一个方面就是java能使软件在很小的机器上运行,基础解释其和类库的支持的大小约为40kb,增加基本的标准库和线程支持的内存需要增加125kb。
2、分布式:java带有很强大的tcp/ip协议族的例程库,java应用程序能够通过url来穿过网络来访问远程对象,由于servlet机制的出现,使java编程非常的高效,现在许多的大的webserver都支持servlet。
3、oo:面向对象设计是把重点放在对象及对象的接口上的一个编程技术。其面向对象和c++有很多不同,在与多重继承的处理及java的原类模型。
4、健壮特性:java采取了一个安全指针模型,能减小重写内存和数据崩溃的可能型。
5、安全:java用来设计网路和分布系统,这带来了新的安全问题,java可以用来构建防病毒和防攻击的system。事实证明java在防毒这一方面做的比较好。
6、中立体系结构:java编译其生成体系结构中立的目标文件格式可以在很多处理器上执行,编译器产生的指令字节码(javabytecode)实现此特性,此字节码可以在任何机器上解释执行。
7、可移植性:java中对基本数据结构类型的大小和算法都有严格的规定所以可移植性很好。
8、多线程:java处理多线程的过程很简单,java把多线程实现交给底下操作系统或线程程序完成所以多线程是java作为服务器端开发语言的流行原因之一。
9、applet和servlet:能够在网页上执行的程序叫applet,需要支持java的浏览器很多,而applet支持动态的网页,这是很多其他语言所不能做到的。
java语言有哪些特点要学习精湛的Java技术,来北京java培训北京北大青鸟学校,助你早日成才。
0条评论