当前位置:首页 » 编程语言 » java多实现

java多实现

发布时间: 2025-09-05 02:50:52

java多线程有哪几种实现方式

JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。

1、继承Thread类实现多线程
继承Thread类的方法尽管被我列为一种多线程实现方式,但Thread本质上也是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过Thread类的start()实例方法。start()方法是一个native方法,它将启动一个新线程,并执行run()方法。这种方式实现多线程很简单,通过自己的类直接extend Thread,并复写run()方法,就可以启动新线程并执行自己定义的run()方法。例如:

[java]view plain

  • {

  • publicvoidrun(){

  • System.out.println("MyThread.run()");

  • }

  • }

  • 在合适的地方启动线程如下:

  • [java]view plain

  • MyThreadmyThread1=newMyThread();

  • MyThreadmyThread2=newMyThread();

  • myThread1.start();

  • myThread2.start();


  • 2、实现Runnable接口方式实现多线程

  • 如果自己的类已经extends另一个类,就无法直接extends Thread,此时,必须实现一个Runnable接口,如下:

  • [java]view plain

  • {

  • publicvoidrun(){

  • System.out.println("MyThread.run()");

  • }

  • }

  • 为了启动MyThread,需要首先实例化一个Thread,并传入自己的MyThread实例:

  • [java]view plain

  • MyThreadmyThread=newMyThread();

  • Threadthread=newThread(myThread);

  • thread.start();

  • 事实上,当传入一个Runnable target参数给Thread后,Thread的run()方法就会调用target.run(),参考JDK源代码:

  • [java]view plain

  • publicvoidrun(){

  • if(target!=null){

  • target.run();

  • }

  • }


  • 3、使用ExecutorService、Callable、Future实现有返回结果的多线程

  • ExecutorService、Callable、Future这个对象实际上都是属于Executor框架中的功能类。想要详细了解Executor框架的可以访问http://www.javaeye.com/topic/366591 ,这里面对该框架做了很详细的解释。返回结果的线程是在JDK1.5中引入的新特征,确实很实用,有了这种特征我就不需要再为了得到返回值而大费周折了,而且即便实现了也可能漏洞百出。

  • 可返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnable接口。执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回的Object了,再结合线程池接口ExecutorService就可以实现传说中有返回结果的多线程了。下面提供了一个完整的有返回结果的多线程测试例子,在JDK1.5下验证过没问题可以直接使用。

㈡ JAVA:一个类实现多个接口

//A接口interface A{

public int getA();

}

//B接口

interface B{

public int getB();

}

//实现了某个接口必须实现其全部的方法

public class ImpAB implements A,B{

public int getA() {

return 0;

}

public int getB() {

return 0;

}

}

(2)java多实现扩展阅读:

功能

在Java语言规范中,一个方法的特征仅包括方法的名字,参数的数目和种类,而不包括方法的返回类型,参数的名字以及所抛出来的异常。

在Java编译器检查方法的重载时,会根据这些条件判断两个方法是否是重载方法。但在Java编译器检查方法的置换时,则会进一步检查两个方法(分处超类型和子类型)的返还类型和抛出的异常是否相同。

接口实现和类继承的规则不同,为了数据的安全,继承时一个类只有一个直接父类,也就是单继承,但是一个类可以实现多个接口,接口弥补了类的不能多继承缺点,继承和接口的双重设计既保持了类的数据安全也变相实现了多继承。

Java接口本身没有任何实现,因为Java接口不涉及表象,而只描述public行为,所以Java接口比Java抽象类更抽象化。但是接口不是类,不能使用new 运算符实例化一个接口。

Java接口的方法只能是抽象的和公开的,Java接口不能有构造器,Java接口可以有public、static和final属性。即接口中的属性可以定义为 public static final int value=5。

接口把方法的特征和方法的实现分割开来。这种分割体现在接口常常代表一个角色,它包装与该角色相关的操作和属性,而实现这个接口的类便是扮演这个角色的演员。一个角色由不同的演员来演,而不同的演员之间除了扮演一个共同的角色之外,并不要求其它的共同之处。

㈢ java多线程有几种实现方法

  • 继承Thread类来实现多线程:

  • 当我们自定义的类继承Thread类后,该类就为一个线程类,该类为一个独立的执行单元,线程代码必须编写在run()方法中,run方法是由Thread类定义,我们自己写的线程类必须重写run方法。

    run方法中定义的代码为线程代码,但run方法不能直接调用,如果直接调用并没有开启新的线程而是将run方法交给调用的线程执行

    要开启新的线程需要调用Thread类的start()方法,该方法自动开启一个新的线程并自动执行run方法中的内容


    *java多线程的启动顺序不一定是线程执行的顺序,各个线程之间是抢占CPU资源执行的,所有有可能出现与启动顺序不一致的情况。


    CPU的调用策略:

    如何使用CPU资源是由操作系统来决定的,但操作系统只能决定CPU的使用策略不能控制实际获得CPU执行权的程序。


    线程执行有两种方式:


    1.抢占式:

    目前PC机中使用最多的一种方式,线程抢占CPU的执行权,当一个线程抢到CPU的资源后并不是一直执行到此线程执行结束,而是执行一个时间片后让出CPU资源,此时同其他线程再次抢占CPU资源获得执行权。


    2.轮循式;

    每个线程执行固定的时间片后让出CPU资源,以此循环执行每个线程执行相同的时间片后让出CPU资源交给下一个线程执行。

㈣ java实现多线程的两种方法

Thread t1=new Thread(){
public void run(){
System.out.println("第一种方法");
}
};
t1.start();
Thread t2=new Thread(new Runnable() {
public void run() {
System.out.println("第二种方法,可实现同类下各线程数据共享");
}
});
t2.start();

热点内容
脚本防检测防封 发布:2025-09-05 04:58:46 浏览:853
精品课程算法设计与分析 发布:2025-09-05 04:57:24 浏览:788
javaftp客户端程序 发布:2025-09-05 04:55:54 浏览:889
存储芯片发展 发布:2025-09-05 04:37:59 浏览:970
点距离编程 发布:2025-09-05 04:36:41 浏览:726
群晖邮件服务器动态ip 发布:2025-09-05 04:34:25 浏览:684
云数据库mysql数据库服务器 发布:2025-09-05 04:28:42 浏览:519
c语言中的longlong 发布:2025-09-05 03:37:49 浏览:772
sql终止的语句 发布:2025-09-05 03:21:59 浏览:837
ip地址默认dns服务器 发布:2025-09-05 03:21:27 浏览:56