首页 \ 问答 \ 怎么用JAVA方法求2个数里面最大的数

怎么用JAVA方法求2个数里面最大的数

那个的大哥说下哈用方法求
更新时间:2022-04-26 10:04

最满意答案

JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。
1、继承Thread类实现多线程
继承Thread类的方法尽管被我列为一种多线程实现方式,但Thread本质上也是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过Thread类的start()实例方法。start()方法是一个native方法,它将启动一个新线程,并执行run()方法。这种方式实现多线程很简单,通过自己的类直接extend Thread,并复写run()方法,就可以启动新线程并执行自己定义的run()方法。例如:

[java] view plain copy
public class MyThread extends Thread {  
public void run() {  
System.out.println("MyThread.run()");  
}  
}  
在合适的地方启动线程如下:
[java] view plain copy
MyThread myThread1 = new MyThread();  
MyThread myThread2 = new MyThread();  
myThread1.start();  
myThread2.start();  

2、实现Runnable接口方式实现多线程
如果自己的类已经extends另一个类,就无法直接extends Thread,此时,必须实现一个Runnable接口,如下:
[java] view plain copy
public class MyThread extends OtherClass implements Runnable {  
public void run() {  
System.out.println("MyThread.run()");  
}  
}  
为了启动MyThread,需要首先实例化一个Thread,并传入自己的MyThread实例:
[java] view plain copy
MyThread myThread = new MyThread();  
Thread thread = new Thread(myThread);  
thread.start();  
事实上,当传入一个Runnable target参数给Thread后,Thread的run()方法就会调用target.run(),参考JDK源代码:
[java] view plain copy
public void run() {  
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下验证过没问题可以直接使用。

其他回答

有三种:
 (1)继承thread类,重写run函数
  创建:
  class xx extends thread{
    public void run(){
   thread.sleep(1000) //线程休眠1000毫秒,sleep使线程进入block状态,并释放资源
  }}
  开启线程:
  对象.start() //启动线程,run函数运行
 (2)实现runnable接口,重写run函数
  开启线程:
  thread t = new thread(对象) //创建线程对象
  t.start()
 (3)实现callable接口,重写call函数
  callable是类似于runnable的接口,实现callable接口的类和实现runnable的类都是可被其它线程执行的任务。 
  callable和runnable有几点不同:
  ①callable规定的方法是call(),而runnable规定的方法是run(). 
  ②callable的任务执行后可返回值,而runnable的任务是不能返回值的
  ③call()方法可抛出异常,而run()方法是不能抛出异常的。 
  ④运行callable任务可拿到一个future对象,future表示异步计算的结果。它提供了检查计算是否完成的方法,以等
  待计算的完成,并检索计算的结果.通过future对象可了解任务执行情况,可取消任务的执行,还可获取任务执行的结果

相关问答

更多
  • JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。 1、继承Thread类实现多线程 继承Thread类的方法尽管被我列为一种多线程实现方式,但Thread本质上也是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过Thread类的start()实例方法。start()方法是一个na ...
  • 工厂模式负责将大量有共同接口的类实例化。工厂模式可以决定将哪一个类实例化,不必事先知道每次要实例化哪一个类。 工厂模式的几种形态: l 简单工厂模式。又称静态工厂模式。 l 工厂方法模式。Factory Method,又称多态工厂或虚拟构造子模式(Virtual Constructor)。 l 抽象工厂模式。Abstract Factory,又称工具箱(Kit或ToolKit)模式。 工厂模式的逐步递演反映了抽象的步步加深、解决问题 参考资料: http://dev.csdn.net/develop/art ...
  • BorderLayout, BoxLayout, CardLayout, DefaultMenuLayout, FlowLayout, GridBagLayout, GridLayout, GroupLayout swing里常用的也有这些,至于每个具体的功能自己查一下API就可以了。
  • 这个很好理解,slice切片就是将shoplist内不特定的一组序列存到另一块开辟的内存里。虽然你是将shoplist的全部转存到mylist但,它只是slice中的一种特列。第一次mylist = shoplist 相当于C语言中的内存指针指向同一片内存区域中。第二次mylist = shoplist和C语言中的内存复制是一个道理。 另一位朋友说是浅拷贝,我有不同看法,应该是深拷贝。slice在内存中重新申请了一片区域,是再一次重新建立的数据。改变原有元素的值,并不会改变新变量里的值。 可以通过对元素重新 ...
  • FlowLayout流式布局 BorderLayout边界布局 GridLayout网格布局 CardLayout卡片布局 GridBagLayout网络包布局
  • 实践出真知 简单工厂模式 策略模式 观察者模式 根据自身的项目需求决定
  • 第一种方法:在tomcat中的conf目录中,在server.xml中的,节点中添加: 至于Context 节点属性,可详细见相关文档。 第二种方法:将web项目文件件拷贝到webapps 目录中。 第三种方法:很灵活,在conf目录中,新建 Cat ...
  • VB一般情况下不支持多线程! 不过可以用API来做!
  • 客户程序向服务器发送的请求可以有不同的类型,这样服务器可以根据不同的请求类型进行不同的处理。在HTTP1.0中,定义了三种最基本的请求类 型,GET、POST和HEAD,客户程序用大写指令将请求发送给服务器,后面跟随具体的数据。 其中,HEAD请求在客户程序和服务器之间进行交流,而不会返回具体的文档。当使用GET和POST方法时,服务器最后都将结果文档返回给客户程序,浏览器将 刷新显示。而HEAD请求则不同,它仅仅交流一些内部数据,这些数据不会影响浏览的过程。因此HEAD方法通常不单独使用,而是和其他的请求 ...
  • 一个信号量只能置一次初值,以后只能对之进行p操作或v操作。由此也可以看到,信号量机制必须有公共内存,不能用于分布式操作系统,这是它最大的弱点。信号量机制功能强大,但使用时对信号量的操作分散, 而且难以控制,读写和维护都很困难。加重了程序员的编码负担;核心操作P-V分散在各用户程序的代码中,不易控制和管理;一旦错误,后果严重,且不易发现和纠正。 (b)自旋锁: 旋锁是为了保护共享资源提出的一种锁机制。调用者申请的资源如果被占用,即自旋锁被已经被别的执行单元保持,则调用者一直循环在那里看是否该自旋锁的保持着已经 ...

相关文章

更多

最新问答

更多
  • 您如何使用git diff文件,并将其应用于同一存储库的副本的本地分支?(How do you take a git diff file, and apply it to a local branch that is a copy of the same repository?)
  • 将长浮点值剪切为2个小数点并复制到字符数组(Cut Long Float Value to 2 decimal points and copy to Character Array)
  • OctoberCMS侧边栏不呈现(OctoberCMS Sidebar not rendering)
  • 页面加载后对象是否有资格进行垃圾回收?(Are objects eligible for garbage collection after the page loads?)
  • codeigniter中的语言不能按预期工作(language in codeigniter doesn' t work as expected)
  • 在计算机拍照在哪里进入
  • 使用cin.get()从c ++中的输入流中丢弃不需要的字符(Using cin.get() to discard unwanted characters from the input stream in c++)
  • No for循环将在for循环中运行。(No for loop will run inside for loop. Testing for primes)
  • 单页应用程序:页面重新加载(Single Page Application: page reload)
  • 在循环中选择具有相似模式的列名称(Selecting Column Name With Similar Pattern in a Loop)
  • System.StackOverflow错误(System.StackOverflow error)
  • KnockoutJS未在嵌套模板上应用beforeRemove和afterAdd(KnockoutJS not applying beforeRemove and afterAdd on nested templates)
  • 散列包括方法和/或嵌套属性(Hash include methods and/or nested attributes)
  • android - 如何避免使用Samsung RFS文件系统延迟/冻结?(android - how to avoid lag/freezes with Samsung RFS filesystem?)
  • TensorFlow:基于索引列表创建新张量(TensorFlow: Create a new tensor based on list of indices)
  • 企业安全培训的各项内容
  • 错误:RPC失败;(error: RPC failed; curl transfer closed with outstanding read data remaining)
  • C#类名中允许哪些字符?(What characters are allowed in C# class name?)
  • NumPy:将int64值存储在np.array中并使用dtype float64并将其转换回整数是否安全?(NumPy: Is it safe to store an int64 value in an np.array with dtype float64 and later convert it back to integer?)
  • 注销后如何隐藏导航portlet?(How to hide navigation portlet after logout?)
  • 将多个行和可变行移动到列(moving multiple and variable rows to columns)
  • 提交表单时忽略基础href,而不使用Javascript(ignore base href when submitting form, without using Javascript)
  • 对setOnInfoWindowClickListener的意图(Intent on setOnInfoWindowClickListener)
  • Angular $资源不会改变方法(Angular $resource doesn't change method)
  • 在Angular 5中不是一个函数(is not a function in Angular 5)
  • 如何配置Composite C1以将.m和桌面作为同一站点提供服务(How to configure Composite C1 to serve .m and desktop as the same site)
  • 不适用:悬停在悬停时:在元素之前[复制](Don't apply :hover when hovering on :before element [duplicate])
  • 常见的python rpc和cli接口(Common python rpc and cli interface)
  • Mysql DB单个字段匹配多个其他字段(Mysql DB single field matching to multiple other fields)
  • 产品页面上的Magento Up出售对齐问题(Magento Up sell alignment issue on the products page)