一、多线程的优缺点
多线程的优点:
1)资源利用率更好 2)程序设计在某些情况下更简单 3)程序响应更快
多线程的代价:
1)设计更复杂 虽然有一些多线程应用程序比单线程的应用程序要简单,但其他的一般都更复杂。在多线程访问共享数据的时候,这部分代码需要特别的注意。线程之间的交互往往非常复杂。不正确的线程同步产生的错误非常难以被发现,并且重现以修复。
2)上下文切换的开销 当CPU从执行一个线程切换到执行另外一个线程的时候,它需要先存储当前线程的本地的数据,程序指针等,然后载入另一个线程的本地数据,程序指针等,最后才开始执行。这种切换称为“上下文切换”(“context switch”)。CPU会在一个上下文中执行一个线程,然后切换到另外一个上下文中执行另外一个线程。上下文切换并不廉价。如果没有必要,应该减少上下文切换的发生。
二、创建java多线程
1、创建Thread的子类
创建Thread子类的一个实例并重写run方法,run方法会在调用start()方法之后被执行。例子如下:
1 public class MyThread extends Thread {
2 public void run(){
3 System.out.println("MyThread running");
7 MyThread myThread = new MyThread();
8 myTread.start();
View Code
也可以如下创建一个Thread的匿名子类:
1 Thread thread = new Thread(){
2 public void run(){
3 System.out.println("Thread Running");
6 thread.start();
View Code
2、实现Runnable接口
第二种编写线程执行代码的方式是新建一个实现了java.lang.Runnable接口的类的实例,实例中的方法可以被线程调用。下面给出例子:
1 public class MyRunnable implements Runnable {
2 public void run(){
3 System.out.println("MyRunnable running");
7 Thread thread = new Thread(new MyRunnable());
8 thread.start();
View Code
同样,也可以创建一个实现了Runnable接口的匿名类,如下所示:
1 Runnable myRunnable = new Runnable(){
2 public void run(){