39. Java中的多线程.docx
文本预览下载声明
Java中的多线程(1)进程是正在进行的程序,用来开辟内存空间的;(2)线程:就是进程中一个负责程序执行的控制单元(执行路径)。一个进程中至少有一个线程。一个进程中允许有多个执行路径,即多线程。开启多个线程是为了同时运行多部分代码;任务: 每个线程都具有自己运行的内容,这个内容就可以称为线程要执行的任务。多线程的好处:解决了多部分代码同时运行的目的;多线程的弊端:多线程过多,使效率降低。因为程序的执行都是在CPU中做着快速的切换完成的,且这个切换是随机的。JVM启动时就已经启动了至少两个线程:主线程: 执行main方法的线程:该线程的任务代码都定义在main方法里8;负责垃圾回收的线程。创建一个线程的目的是:为了开启一条执行路径,能够达到执行此代码和其他代码的同时运行,而运行此代码就是这个执行路径的任务。JVM创建的主线程的任务都定义在了主方法中;而自定义的线程的任务在哪里呢?为什么要重写run方法呢?Thread用于描述线程,线程是需要任务的,所以Thread类也对任务进行描述;这个任务就是通过Thread类中的run方法来体现,也就是说,run方法就是封装自定义线程运行任务的方法。run方法中定义的就是线程需要执行的任务代码。开启线程是为了执行指定的代码,所以只有继承Thread类,并重写run方法,将运行的代码定义在run方法中即可。创建线程的两个方法:(1)方法一 : 继承Thread类。 创建步骤:① 定义一个类并继承Thread类,② 重写Thread类中的run方法;③直接创建此类的一个对象,即创建线程成功,④调用此对象的start方法,启动此线程。(调用run与调用start方法有什么区别?)run方法只是个普通的方法,调用run方法并不能启动此线程,只有调用start方法才会启动一个线程,启动后自动执行run方法中的任务。class PrimeThread extends Thread { long minPrime; PrimeThread(long minPrime) { this.minPrime = minPrime; } public void run() { // compute primes larger than minPrime?.?.?. } }启动:PrimeThread p = new PrimeThread(143); p.start();(2) 方法二 :①接口Runnable: 里面只有一个抽象方法run()方法,实现此接口就是实现任务的封装,然后通过生成对象,实现任务的对象封装,作为参数传递给Thread,创建Thread对象(线程对象)。Thread类也是实现了Runnable接口的。②如果一个类继承了其他的父类,此时就不能继承Thread了,所以只能继承接口了,此时就可以继承Runnable接口。 创建线程:步骤:i. 定义类并实现接口Runnable;ii. 重写接口中的run方法,将线程的任务代码封装到run方法中去;iii .对新创建的类new出一个对象,并作为Thread类构造方法的参数传递进去;目的是创建一个Thread类的线程对象;为什么?因为线程的任务都封装在创建的类(此类继承接口Runnable)中的run方法中,所以要在创建线程对象(Thread对象)时,必须明确此线程要执行的任务(run方法),即需要把创建类的对象作为参数传进去。iiii.调用线程对象(Thread类的对象)的start方法启动线程。注意: Thread构造方法中如果参数是个类的对象,则会调用传进去的对象的run方法,实现方式如下面代码:class PrimeRun implements Runnable { long minPrime; PrimeRun(long minPrime) { this.minPrime = minPrime; } public void run() { // compute primes larger than minPrime?.?.?. } }启动线程:PrimeRun p = new PrimeRun(143); new Thread(p).start();解析: Thread的有多个构造方法,其中一个是mk:@MSITStore:G:\Android学习资料\CHM帮助文档\jdk-8u60-docs-all_API.chm::/api/java/lang/Thread.htmlThread(mk:@MSITStore:G:\Android学习资料\CHM帮助文档\jdk-8u60-docs-all_API.chm::/api/java/lang/Runnable.htmlRunnable?target) Allocates a new Threa
显示全部