从你的全世界路过-论演员的自我修养
线程
1.概念 : 线程是一个程序内部的顺序控制流
2.线程与进程的区别
(1)每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销
(2) 线程可以看做轻量级的进程,同一线程共享代码和数据空间。每个线程有独立的运行栈和程序计数器PC,线程切换的开销小
(3) 多进程 在操作系统中同时运行多个任务(程序)
(4) 多线程:在同一应用和程序中有多个顺序流同时进行
3 注意点
(1)java 的线程是通过java.lang.Threadl类来实现的
(2)VM启动时会有一个由主方法 (public void main (){}) 所定义的线程
(3)可以通过创建Thread的实例来创建线程
(4)每个线程都是通过某个特定Thread对象所对应的方法 run()来完成操作的 方法run()成为线程体
(5)通过调用Thread类的start()方法来启动一个线程。
4 创建线程的方式
(1)第一种
(I) 定义线程类实现Runnable接口
(I) Thread myThread=new Thread(target) //target 为Runnable接口类型
(I) Runnable中只有一个方法;
[I] public void run(){} // 用以定义线程运行体
(I)使用Runnable接口可以为多个线程提供共享的数据
(I)在实现Runnable接口的类的run方法定义中可以使用Thread的静态方法;
[I] public static Thread currentThread() 获取当前线程的引用
(2)第二种
(I) 可以定义一个Thread的子类并重写run()方法 如:
class MyThread extends Thread{
public void run(){......}
}
(I) 然后生成该类的对象:
MyThread mythread =new MyThread(..........)
public class Actor extends Thread { public void run(){ System.out.println(getName()+"是一个演员"); int count =0; boolean keepRunning=true; while(keepRunning){ System.out.println(getName()+"登台演出"+(++count)); if(count==100){ keepRunning=false; } if(count%10==0){ try { Thread.sleep(1000); //线程休眠 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } System.out.println(getName()+"的演出结束了"); }
public class Actress implements Runnable { public void run() { System.out.println(Thread.currentThread().getName()+"是一个演员!"); int count =0; boolean keepRunning=true; while(keepRunning){ System.out.println(Thread.currentThread().getName()+"登台演出"+(++count)); if(count==100){ keepRunning=false; } if(count%10==0){ try { Thread.sleep(1000); //线程休眠 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } System.out.println(Thread.currentThread().getName()+"的演出结束了"); } }
public static void main(String [] args){ Thread actor=new Actor(); actor.setName("Mr.Thread"); actor.start(); Thread actressThread=new Thread (new Actress(),"Mrs.Runnable"); actressThread.start(); }