多线程是为了使得多个线程并行的工作以完成多项任务,以提高系统的效率。线程是在同一时间需要完成多项任务的时候被实现的。
在java中要想实现多线程,有两种方法,一种是继承Thread类,另外一种是实现Runable接口。对于一个进程中的多个线程来说,多个线程共享进程的内存块,当有新的线程产生的时候,操作系统不分配新的内存,而是让新线程共享原有的进程块的内存。因此,线程间的通信很容易,速度也很快。不同的进程因为处于不同的内存块,因此进程之间的通信相对困难。多线程的目的是为了最大限度的利用CPU资源。
程序中继承Thread类时调用的是start()方法,但是实际上调用的还是run()方法的主体。为什么我们不能直接调用run()方法呢?因为线程的运行需要本地操作系统的支持。查看start的源代码的时候,会发现调用的是start0(),并且这个这个方法用了native关键字,此关键字表示调用本地操作系统的函数,因为多线程的实现需要本地操作系统的支持。
实现Runnable接口,class 类名 implements Runnable{}。Thread和Runnable的区别,首先如果一个类继承Thread,则不适合资源共享,但是如果实现了Runable接口的话,则很容易的实现资源共享。其次,其实Thread也是实现Runnable接口的,class Thread implements Runnable{},Thread中的run方法调用的是Runnable接口的run方法,Thread和Runnable都实现了run方法。当使用 runnable 接口时,您不能直接创建所需类的对象并运行它;必须从 Thread 类的一个实例内部运行它。许多程序员更喜欢 runnable 接口,因为Java多线程编程从 Thread 类继承会强加类层次。
实现Runnable接口比继承Thread类所具有的优点
1.适合多个相同的程序代码的线程去处理同一个资源
2.可以避免java中的单继承的限制
3.增加程序的健壮性,代码可以被多个线程共享,代码和数据独立[/align]
在java中要想实现多线程,有两种方法,一种是继承Thread类,另外一种是实现Runable接口。对于一个进程中的多个线程来说,多个线程共享进程的内存块,当有新的线程产生的时候,操作系统不分配新的内存,而是让新线程共享原有的进程块的内存。因此,线程间的通信很容易,速度也很快。不同的进程因为处于不同的内存块,因此进程之间的通信相对困难。多线程的目的是为了最大限度的利用CPU资源。
程序中继承Thread类时调用的是start()方法,但是实际上调用的还是run()方法的主体。为什么我们不能直接调用run()方法呢?因为线程的运行需要本地操作系统的支持。查看start的源代码的时候,会发现调用的是start0(),并且这个这个方法用了native关键字,此关键字表示调用本地操作系统的函数,因为多线程的实现需要本地操作系统的支持。
实现Runnable接口,class 类名 implements Runnable{}。Thread和Runnable的区别,首先如果一个类继承Thread,则不适合资源共享,但是如果实现了Runable接口的话,则很容易的实现资源共享。其次,其实Thread也是实现Runnable接口的,class Thread implements Runnable{},Thread中的run方法调用的是Runnable接口的run方法,Thread和Runnable都实现了run方法。当使用 runnable 接口时,您不能直接创建所需类的对象并运行它;必须从 Thread 类的一个实例内部运行它。许多程序员更喜欢 runnable 接口,因为Java多线程编程从 Thread 类继承会强加类层次。
实现Runnable接口比继承Thread类所具有的优点
1.适合多个相同的程序代码的线程去处理同一个资源
2.可以避免java中的单继承的限制
3.增加程序的健壮性,代码可以被多个线程共享,代码和数据独立[/align]