当前位置: 首页 > news >正文

php可以做网站开发公司前期部岗位职责

php可以做网站,开发公司前期部岗位职责,番禺网站设计,成都建设局官网Java多线程实现方式主要有三种#xff1a;继承Thread类、实现Runnable接 口、使用ExecutorService、Callable 实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值#xff0c;只有最后一种Callable是带返回值的#xff0c;返回结果可以从Future中取出来关于Exe…Java多线程实现方式主要有三种继承Thread类、实现Runnable接 口、使用ExecutorService、Callable 实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值只有最后一种Callable是带返回值的返回结果可以从Future中取出来关于ExecutorService 参考Java-线程池专题 (美团)1、继承Thread类实现多线程继承Thread类的方法尽管被我列为一种多线程实现方式但Thread本质上也是实现了Runnable接口的一个实例它代表一个线程的实例并且启动线程的唯一方法就是通过Thread类的start()实例方法。start()方法是一个native方法它将启动一个新线程并执行run()方法。这种方式实现多线程很简单通过自己的类直接extend Thread并复写run()方法就可以启动新线程并执行自己定义的run()方法。例如public class MyThread extendsThread {public voidrun() {System.out.println(MyThread.run());}}在合适的地方启动线程如下MyThread myThread1 newMyThread();MyThread myThread2 newMyThread();myThread1.start();myThread2.start();2、实现Runnable接口方式实现多线程如果自己的类已经extends另一个类就无法直接extends Thread此时必须实现一个Runnable接口如下public class MyThread extends OtherClass implementsRunnable {public voidrun() {System.out.println(MyThread.run());}}为了启动MyThread需要首先实例化一个Thread并传入自己的MyThread实例MyThread myThread newMyThread();Thread thread newThread(myThread);thread.start();事实上当传入一个Runnable target参数给Thread后Thread的run()方法就会调用target.run()参考JDK源代码public voidrun() {if (target ! null) {target.run();}}3、使用ExecutorService、Callable 实现有返回结果的多线程ExecutorService、Callable 这个对象实际上都是属于Executor框架中的功能类。想要详细了解Executor框架的可以访问 主题java并发编程-Executor框架这里面对该框架做了很详细的解释。返回结果的线程是在JDK1.5中引入的新特征确实很实用有了这种特征我就不需要再为了得到返回值而大费周折了而且即便实现了也可能漏洞百出。可返回值的任务必须实现Callable接口类似的无返回值的任务必须Runnable接口。执行Callable任务后可以获取一个Future的对象在该对象上调用get就可以获取到Callable任务返回的Object了再结合线程池接口ExecutorService就可以实现传说中有返回结果的多线程了。下面提供了一个完整的有返回结果的多线程测试例子在JDK1.5下验证过没问题可以直接使用。代码如下import java.util.concurrent.*;importjava.util.Date;importjava.util.List;importjava.util.ArrayList;/*** 有返回值的线程*/SuppressWarnings(unchecked)public classTest {public static void main(String[] args) throwsExecutionException,InterruptedException {System.out.println(----程序开始运行----);Date date1 newDate();int taskSize 5;//创建一个线程池ExecutorService pool Executors.newFixedThreadPool(taskSize);//创建多个有返回值的任务List list new ArrayList();for (int i 0; i taskSize; i) {Callable c new MyCallable(i );//执行任务并获取Future对象Future f pool.submit(c);//System.out.println( f.get().toString());list.add(f);}//关闭线程池pool.shutdown();//获取所有并发任务的运行结果for(Future f : list) {//从Future对象上获取任务的返回值并输出到控制台System.out.println( f.get().toString());}Date date2 newDate();System.out.println(----程序结束运行----程序运行时间【 (date2.getTime() - date1.getTime()) 毫秒】);}}class MyCallable implements Callable{privateString taskNum;MyCallable(String taskNum) {this.taskNum taskNum;}public Object call() throwsException {System.out.println( taskNum 任务启动);Date dateTmp1 newDate();Thread.sleep(1000);Date dateTmp2 newDate();long time dateTmp2.getTime() -dateTmp1.getTime();System.out.println( taskNum 任务终止);return taskNum 任务返回运行结果,当前任务时间【 time 毫秒】;}}代码说明上述代码中Executors类提供了一系列工厂方法用于创先线程池返回的线程池都实现了ExecutorService接口。public static ExecutorService newFixedThreadPool(int nThreads)创建固定数目线程的线程池。public static ExecutorService newCachedThreadPool()创建一个可缓存的线程池调用execute 将重用以前构造的线程(如果线程可用)。如果现有线程没有可用的则创建一个新线程并添加到池中。终止并从缓存中移除那些已有 60 秒钟未被使用的线程。public static ExecutorService newSingleThreadExecutor()创建一个单线程化的Executor。public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize)创建一个支持定时及周期性的任务执行的线程池多数情况下可用来替代Timer类。ExecutoreService提供了submit()方法传递一个Callable或Runnable返回Future。如果Executor后台线程池还没有完成Callable的计算这调用返回Future对象的get()方法会阻塞直到计算完成。具体 ExecutorService的使用 参考Java-线程池专题 (美团)二、Thread 和Runnable 的区别和联系如果研究一下源码就会发现Thread其实本身就是实现了接口 Runnable的一个类;因此 Thread中的方法和成员变量要比Runnable多最典型地就是 Thread有start()方法但是Runnable接口没有start()方法如果想要执行一段线程public threadTest extendsThread {...Overridepublic voidrun() {..}}threadTest th1new threadTest(一号窗口);th1.start();这里 继承了Thread类并且重写了方法run();然后调用 此类的start()方法来执行记住不是调用run()方法执行 而是start(),因为1.run()并不是启动线程而是简单的方法调用。2.并不是一启动线程(调用start()方法)就执行这个线程而是进入就绪状态什么时候运行要看CPU。区别实际开发中我们通常采用Runnable接口来实现多线程。因为实现Runnable接口比继承Thread类有如下好处1. 避免继承的局限一个类可以继承多个接口但是类只能继承一个类。2. Runnable接口实现的线程便于资源共享。而通过Thread类实现各自线程的资源是独立的不方便共享。联系public class Thread extends Object implements Runnable发现Thread类也是Runnable接口的子类。针对于区别的第二条Runnable接口实现的线程便于资源共享而通过Thread类实现各自的线程的资源是独立的不方便共享。举个栗子网上最经典的卖票的例子(1)继承Thread类packagecom.thread;/** 通过继承Thread类实现多线程* Thread类是有run()方法的* 也有start方法**/public class threadTest extendsThread {private int ticket 10;privateString name;publicthreadTest(String name){this.namename;}Overridepublic voidrun() {//TODO Auto-generated method stub//super.run();while(true){if(this.ticket0){try{Thread.sleep(1000);}catch(InterruptedException e) {//TODO Auto-generated catch blocke.printStackTrace();}System.out.println(this.name卖票---(this.ticket--));}else{break;}}}public static voidmain(String[] args) {//TODO Auto-generated method stubthreadTest th1new threadTest(一号窗口);threadTest th2new threadTest(二号窗口);th1.start();th2.start();//threadTest mtnew threadTest();//Thread t1 new Thread(mt,一号窗口);//Thread t2 new Thread(mt,二号窗口);//t1.start();//t2.start();}}(2)实现Runnable接口packagecom.thread;/** 通过实现Runnable接口实现多线程* Runnable类是有run()方法的* 但是没有start方法**/public class runnableTest implementsRunnable {private int ticket 10;Overridepublic voidrun() {//TODO Auto-generated method stubwhile(true){if(ticket0){try{Thread.sleep(1000);}catch(InterruptedException e) {//TODO Auto-generated catch blocke.printStackTrace();}System.out.println(Thread.currentThread().getName()卖票---(this.ticket--));}else{break;}}}public static voidmain(String[] args) {runnableTest mtnewrunnableTest();Thread t1new Thread(mt,一号窗口);Thread t2new Thread(mt,二号窗口);t1.start();t2.start();}}可以看到Thread 各线程资源是独立的Runnable 便于实现线程共享资源Runable Callable Future 的区别与联系Runable Callable Future都是我们在java多线程开发中遇到的接口那么这些接口之间有什么区别呢Runable作为我们多线程开发中经常使用到的接口它定义run方法只要对象实现这个方法将对象作为参数输入到new Thread(Runnable A )线程一旦start()那么就 自动执行了没有任何的返回结果无法知道什么时候结束适用于完全异步的任务不用关心结果。样例CallableCallable定义的接口call(),它能够抛出异常并且能够有一个返回结果。实现了Callable要想提交到线程池中 直接通过executorService.submit(new CallAbleTask(i))但是返回的结果是Future结果信息从Future里面取出具体的业务逻辑在call中执行。好了下面介绍下FutureFutureFuture提供了五个接口功能如下图总的来说Future能够控制Callable对象的执行检测是否做完可以阻塞式获取结果也可以等待一段时间内获取结果具体的方法含义由上图可见boolean cancel(boolean mayInterruptIfRunning)用来取消任务成功返回true失败则返回falseboolean isCancelled()表示任务是否被取消成功如果在任务正常完成前被取消成功则返回 trueboolean isDone()表示任务是否已经完成若任务完成则返回trueV get()用来获取执行结果这个方法会产生阻塞会一直等到任务执行完毕才返回V get(long timeout, TimeUnit unit) 用来获取执行结果如果在指定时间内还没获取到结果直接返回null。我们看下例子我们能够看到方法的执行都是Callable但是最后获取结果通过Futureget的方式的话就是一直会阻塞在那里获取。以上总结Runable适用于完全异步的任务不用操心执行情况异常出错的。Callable适用于需要由返回结果的对执行中的异常要知晓的需要提交到线程池中。Future主要是线程池执行Callable任务返回的结果。它能够中断任务的执行一直等待结果或者等待一段时间获取结果。
http://www.pierceye.com/news/602557/

相关文章:

  • 可信网站认证有用建设网站什么语言
  • 福州网站建设 大公司wordpress顺序
  • 为什么网站开发要用架构个人主页网站制作教程
  • 东莞教育网站建设做网站工资还没有文员高
  • 郑州网站制作工作室国内网站开发
  • 现在什么网站做外贸的最好wordpress window系统
  • 柬埔寨网赌网站开发新网络营销
  • html5毕业设计作品苏州关键词优化排名推广
  • 网站建设包括的内容相册在线设计平台
  • 花生壳可做网站吗微商城开发用华网天下首选
  • 口岸地区网站建设内容塔里木油田公司档案馆网站建设研究
  • 网站备案属于公司哪一块石家庄最新状况
  • 秦州建设网站免费代刷网站推广
  • 怎么查看一个网站是用什么程序做的我的家乡湛江网站设计
  • 沈阳网页模板建站开发手机app多少钱
  • 全国建设注册中心网站网页设计师培训价格
  • 做网站地图泰安百度公司代理商
  • 网站后台管理员密码汽车网站更新怎么做
  • 广东省网站备案查询怎么建设网站空间和备案
  • 企业网站软件下载红木家具网站模板
  • 如何创建网站步骤湖北网站制作公司的联系方式
  • 佛山建网站费用seo推广效果怎么样
  • 如何选择网站建设公司永州网页定制
  • 淮北市重点工程建设局网站重庆哪家网站
  • 音乐网站开发背景及意义自定义建设网站
  • 商标设计网站猪八戒宝塔一键wordpress
  • 公司网站用什么开发网站 建设 计划书
  • 安陆市城乡建设局网站w10怎么做信任网站
  • wordpress上站工具内网门户网站
  • 商城网站服务器漳浦建设银行网站