文档详情

Java中的多线程编程.docx

发布:2017-04-03约2.22万字共27页下载文档
文本预览下载声明
一、Java线程:创建与启动Java多线程的创建和启动有两种方式:继承java.lang.Thread类,在类中重构run()方法,然后在main中直接new thread().start()即可;实现了java.lang.Runnable接口的类,重构runnable接口中的run()方法,则用Thread的构造方法:Thread(Runnable target) Thread(Runnable target, String name) Thread(ThreadGroup group, Runnable target) Thread(ThreadGroup group, Runnable target, String name) Thread(ThreadGroup group, Runnable target, String name, long stackSize)注意:每个线程都是对象,都有自己的ID,获取当前的线程使用Thread.currentThread(),当run()方法执行结束时,线程结束,只有新的线程才可以执行二、Java线程:线程栈模型与线程的变量方法调用和线程启动的区别在于方法调用时串行的,线程启动是并行的,在栈A中有主线程mian中,当程序执行到Thread.start()时,程序多出一个分支(增加了一个调用栈B),这样,栈A、栈B并行执行。三、Java线程:线程状态的转换前言:线程的状态转换机制中,Thread.join()和Thread.sleep()都提供了某方面的保证,而Thread.yield()和Thread.setPriority()则提供了某种可能,不受保证。下面是线程状态的转换图,要区别阻塞状态和等待队列!睡眠状态Thread.sleep(long millis)和Thread.sleep(long millis, intnanos)静态方法强制当前正在执行的线程休眠(暂停执行),以“减慢线程”。当线程睡眠时,它入睡在某个地方,在苏醒之前不会返回到可运行状态,不保证马上运行。try {??????????? Thread.sleep(123);??????? } catch (InterruptedException e) {??????????? e.printStackTrace();? ??????? }线程休眠的目的是使线程让出CPU的最简单的做法之一,线程休眠时候,会将CPU资源交给其他线程,以便能轮换执行,当休眠一定时间后,线程会苏醒,进入准备状态等待执行。线程的休眠是无法保证其执行顺序的。Thread的非静态方法join的使用,Java Thread中, join() 方法主要是让调用该方法的thread完成run方法里面的东西后,再执行join()方法后面的代码。使用了Thread.join()方法就意味着该线程达到了最高的优先级,在它执行完之后其他线程才能得到执行。publicclassThreadJoin {publicstaticvoid main(String[] args) throwsInterruptedException {Thread t1 = new Thread(newThreadTesterA());Thread t2 = new Thread(newThreadTesterB());t1.start();/* wait t1 to be finished * t1.join()的使用保证了在线程t1执行执行才执行线程t2 * 避免了两个线程的交替执行 * */t1.join(); t2.start();t2.join(); // in this program, this may be removed}}classThreadTesterAimplementsRunnable {privateintcounter;@Overridepublicvoid run() {while (counter = 10) {System.out.print(Counter = + counter + );counter++;}System.out.println();}}classThreadTesterBimplementsRunnable {privateinti;@Overridepublicvoid run() {while (i = 10) {System.out.print(i = + i + );i++;}System.out.println();}}线程的优先级与线程休眠类似,线程的优先级仍然无法保障线程的执行次序。只不过,优先级高的线程获取CPU资源的概率较大,优先级低的并非没机会执行。线程的优先级用1-10之间的整数表示,数
显示全部
相似文档