当前位置:首页 » 编程语言 » java多线程调用方法

java多线程调用方法

发布时间: 2022-07-18 05:37:07

java两个线程同时调用一个类里的同一个方法,这样会出现什么情况有没有问题

根据不同的情况可能存在的情况有:

⑵ 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多线程有几种实现方法

  • 继承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中如何利用多线程同时运行多个方法

首先,这个同时,只是在宏观上的,多线程环境,线程与线程之间,还是串行运行的。
要“同时”运行多个方法,那么,就需要创建多个线程,然后,在线程的run()方法里,写上你想要实现的逻辑。需如果创建多线程,这又是另一个问题(通过继承Thread跟实现Runnable来实现)。

⑸ java多线程调用一个方法的问题

回答1:这个是由CPU的时间片分配决定的,CPU执行的是01代码,一个时间片内执行这么多个01代码,它不能保证能执行完你这个方法

回答2:是的,使用同步的话,就算第一个线程没有执行完,第二个线程想执行这个方法的话却发现被第一个线程锁住了这个方法,只能等第一个线程解锁它才能执行

回答3:我记得有一个关键字是放在变量的定义之前,这样表明这个变量是同步的,反正结果还是用同步

⑹ java多线程调用同步方法时,休眠后代码为什么执行不到

1、java多线程调用同步方法时主程序或者后台服务Service程序两者必须有一个正在运行着,定时任务才会执行。
2、自动执行的任务可以设置开启或关闭定时,检查任务的这一开关处于开启状态。
3、源目录在定时的时间点如果没有变化,任务执行后不会留下日志,通过查看任务的最后执行时间确定任务到底执行了没有。
4、执行失败和没有执行不是同一回事,如果是执行失败则要分析失败原因。这是java多线程调用同步方法时,休眠后代码执行不到的原因。

热点内容
c语言的认识 发布:2025-02-01 11:58:03 浏览:520
svn连接服务器地址 发布:2025-02-01 11:51:31 浏览:416
对源程序为什么要编译 发布:2025-02-01 11:47:46 浏览:218
sql表添加记录 发布:2025-02-01 11:22:08 浏览:864
word编辑加密 发布:2025-02-01 11:18:53 浏览:571
php变量文本 发布:2025-02-01 11:10:46 浏览:426
音悦台上传mv 发布:2025-02-01 11:05:02 浏览:516
微信如何设置访问限制 发布:2025-02-01 10:43:06 浏览:335
b站缓存视频下架还有吗 发布:2025-02-01 10:37:52 浏览:940
e卡通初始密码是多少 发布:2025-02-01 10:31:55 浏览:127