吉林市网站推广专业模板网站制作
web/
2025/10/6 13:07:59/
文章来源:
吉林市网站推广,专业模板网站制作,手机端网站建设哪家好,开发网站需要多久2.1线程属性属性属性类型及用途只读属性注意事项编号(id)long型,标识不同线程是不适合用作唯一标识名称(name)String型#xff0c;区分不同线程否设置名称有助于代码调试和问题定位线程类别(daemon)boolean型#xff0c;true为守护线程#xff0c;false为用户线程否在start方…2.1线程属性属性属性类型及用途只读属性注意事项编号(id)long型,标识不同线程是不适合用作唯一标识名称(name)String型区分不同线程否设置名称有助于代码调试和问题定位线程类别(daemon)boolean型true为守护线程false为用户线程否在start方法之前设置关键任务线程应设置成用户线程优先级(priority)int型1-10的优先级默认值5否建议使用默认值*用户线程会阻止java虚拟机的正常停止当所有用户线程都运行结束java虚拟机才能停止守护线程不会影响java虚拟机的正常停止例如用于监视其他线程的运行情况。如果是强制终止java虚拟机进程则所有线程都会停止。2.2线程方法方法功能备注static Thread currentThread()返回当前线程即当前代码的执行线程同一段代码可能被不同线程执行所有当前线程可能是不同的void run()用于实现线程的任务处理逻辑是由java虚拟机直接调用的应用程序不应调用该方法void start()启动相应线程一个Thread实例的start方法只能被调用一次。多次调用会抛出异常void join()等待相应线程运行结束若A线程中调用B线程的join方法表示A线程停止直到B线程运行结束。static void yield()使当前线程主动放弃其对处理器的占用可能导致当前线程被暂停如果没有其他线程运行则调用该方法的线程继续运行static void sleep(long millis)使当前线程休眠指定时间可以制作计时器2.3一些废弃方法方法功能stop停止线程的运行suspend暂停线程的运行resume使被暂停的线程继续运行2.4常见的线程1.main线程即main方法。2.http请求一个请求就是一个线程。3.java虚拟机垃圾回收器通过垃圾回收线程实现。4.JIT编译器将字节码编译为机器码是通过java虚拟机创建的专门的线程执行的。2.5线程的层次关系A线程中的代码创建了B线程则A线程是B线程的父线程B为子线程。线程间的父子关系被称为线程的层次关系。父线程和子线程之间的生命周期没有必然联系比如父线程结束后子线程可以继续运行。2.6线程的生命周期状态版本一Thread.getState()查看线程状态包括以下几种NEW已创建而未启动状态。一个线程中只会出现一次。RUNNABLE可被线程调度器进行调度的状态(READY)或者正在运行的状态(RUNNING)。处于READY状态的线程也称作活跃线程。BLOCKED阻塞状态。一个线程可能因为阻塞式I/O操作如文件读写或者因为申请不到锁阻塞解除即为RUNNABLE状态。WAITING等待状态。能够使线程变更为WAITING状态的方法包括Object.wait()、Thread.join()和LockSupport.park(Object)。解除WAITING状态的方法Object.notify()/notifiAll() 和 LockSupport.unpark(Object)。TIMED_WAITING带有时间限制的等待状态。在没有指定操作解除该状态达到一定时间自动转化为RUNNABLE状态。TERMINATED终止状态。包括运行结束和发生异常时。版本二新建(new Thread) 当创建Thread类的一个实例(对象)时此线程进入新建状态(未被启动)。例如Thread t1new Thread();就绪(runnable) 线程已经被启动正在等待被分配给CPU时间片也就是说此时线程正在就绪队列中排队等候得到CPU资源。例如t1.start();运行(running) 线程获得CPU资源正在执行任务(run()方法)此时除非此线程自动放弃CPU资源或者有优先级更高的线程进入线程将一直运行到结束。死亡(dead)当线程执行完毕或被其它线程杀死线程就进入死亡状态这时线程不可能再进入就绪状态等待执行。自然终止正常运行run()方法后终止异常终止调用stop()方法让一个线程终止运行堵塞(blocked)由于某种原因导致正在运行的线程让出CPU并暂停自己的执行即进入堵塞状态。正在睡眠用sleep(long t) 方法可使线程进入睡眠方式。一个睡眠着的线程在指定的时间过去可进入就绪状态。正在等待调用wait()方法。(调用motify()方法回到就绪状态)2.7简单运用实例1 public classDownloadFiles {23 public static voidmain(String[] args) {45 String[] urls new String[3];6 urls[0] http://www.xinhuanet.com//world/2016-03/09/c_128786392.htm;7 urls[1] http://news.gmw.cn/2018-05/25/content_28959728.htm;8 urls[2] http://gz.people.com.cn/BIG5/200190/205622/206162/15876781.html;910 Thread downloadThread null;11 for(String url :urls){12 downloadThread new Thread(newFileDownloader(url));13 downloadThread.start();14 }15 }1617 static class FileDownloader implementsRunnable{1819 private finalString fileUrl;2021 publicFileDownloader(String url) {22 this.fileUrl url;23 }2425 Override26 public voidrun() {27 String fileName fileUrl.substring(fileUrl.lastIndexOf(/)1);28 try{29 URL url newURL(fileUrl);30 String localFileName System.getProperty(java.io.tmpdir)/viscent-fileName;31 downloadFiles(url,new FileOutputStream(localFileName),1024);32 } catch(Exception e) {33 e.printStackTrace();34 }35 }3637 private void downloadFiles(URL url,OutputStream outputStream,intbufSize){38 try{39 HttpURLConnection urlConnectionnull;40 //打开URL41 urlConnection (HttpURLConnection)url.openConnection();42 urlConnection.setRequestProperty(User-Agent, Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36)); //防止报403错误。43 //获取服务器响应代码44 int responsecodeurlConnection.getResponseCode();45 if(responsecode200){46 BufferedReader reader new BufferedReader(new InputStreamReader(urlConnection.getInputStream(),UTF-8));47 String content null;48 while((content reader.readLine()) ! null){49 outputStream.write(content.getBytes());50 }51 System.out.println(下载成功);52 reader.close();53 urlConnection.disconnect();54 }55 } catch(IOException e) {56 e.printStackTrace();57 }58 }5960 }6162 }2.8多线程编程的优势和风险优势1.提高系统的吞吐率一个进程有多个并发的操作2.提高响应性。多线程的请求对其他请求不会产生影响。3.充分利用多核。4.最小化对系统资源的浪费。多个线程共享其所在进程所申请的资源想比多个进程编程节约资源。5.简化程序的结构。风险1.线程安全问题。多个线程共享数据的时候如果没有采取相应的并发访问控制措施可能会产生数据一致性问题、丢失更新等。2.线程活性问题。死锁问题两个线程互相等待对方先释放锁一直处于BLOCKED状态。活锁问题一直尝试某个操作但就是没有进展一直处于RUNNING状态。线程饥饿问题永远无法获取处理器执行的机会一直处于READY状态。3.上下文切换问题。处理器从执行一个线程转向执行另一个线程的时候会进行上下文切换增加系统的消耗不利于系统的吞吐率。4.可靠性。单进程多线程的方式可能因为进程终止而所有线程终止。有时可以考虑多进程多线程的方式。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/87928.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!