Java中的线程(一)(基本方法)

一、多线程的概念

    1、进程: 每一个正在执行的程序都称为进程。进程是系统进行资源分配和调用的独立单位。每一个进程都有它自己的内存空间和系统资源。

    2、 线程: 线程就是进程的一条执行路径。一个进程如果只有一条执行路径,则称为单线程程序。一个进程如果有多条执行路径,则称为多线程程序

 Java中的线程(一)(基本方法)

二、多线程的实现模式(两种)

    1、继承Thread类,重写run()方法

          启动:创建子类对象.start()

[java] view plain copy
  1. public class MyThread extends Thread {// 继承Thread类  
  2.       
  3.     @Override  
  4.     public void run() {  
  5.         for(int i=1;i<101;i++) {  
  6.             System.out.println(getName()+"=="+i);  
  7.         }  
  8.     }  
  9. }  
[java] view plain copy
  1. public class ComeTrue {  
  2.       
  3.     public static void main(String[] args) {  
  4.           
  5.         MyThread t1 =new MyThread(); // 创建子类对象  
  6.         MyThread t2 =new MyThread();  
  7.           
  8.         t1.start(); // 启动线程  
  9.         t2.start();  
  10.     }  
  11. }  

    2、实现runnable接口,重写run()方法

          启动:使用静态代理

                    1)、创建真实角色

                    2)、创建代理角色

                    3)、代理角色.start()

[java] view plain copy
  1. public class MyThread implements Runnable{// 实现Runnable接口  
  2.       
  3.     @Override  
  4.     public void run() {  
  5.         for(int i=1;i<101;i++) {  
  6.             System.out.println(Thread.currentThread().getName()+"=="+i);  
  7.         }  
  8.     }  
  9. }  

[java] view plain copy
  1. public class ComeTrue {  
  2.       
  3.     public static void main(String[] args) {  
  4.           
  5.         MyThread my =new MyThread(); // 创建真实对象  
  6.           
  7.         Thread t1 = new Thread(my,"线程一");  //创建代理对象  
  8.         Thread t2 = new Thread(my,"线程二");  //创建代理对象  
  9.           
  10.         t1.start(); // 启动线程  
  11.         t2.start();  
  12.     }  
  13. }  

三、线程生命周期

Java中的线程(一)(基本方法)

四、常用方法与线程控制

            1、常用方法

[java] view plain copy
  1. public class MyThread implements Runnable{// 实现Runnable接口  
  2.       
  3.     @Override  
  4.     public void run() {  
  5.         for(int i=1;i<101;i++) {  
  6.             System.out.println(Thread.currentThread().getName()+"=="+i);  
  7.         }  
  8.     }  
  9. }  
[java] view plain copy
  1. public class ComeTrue {  
  2.       
  3.     public static void main(String[] args) {  
  4.           
  5.         MyThread my =new MyThread(); // 创建真实对象  
  6.           
  7.         Thread t1 = new Thread(my,"线程一");  //创建代理对象  
  8.           
  9.         t1.start(); // 启动线程  
  10.         /* 
  11.          * 常用方法 
  12.          */  
  13.         t1.isAlive();           // 判断线程是否还活着,即线程是否还未终止  
  14.         t1.setPriority(10);             // 设置线程的优先级数值,其值为1——10  
  15.         t1.getPriority();       // 获得线程的优先级数值  
  16.         t1.setName("线程一");          // 设置线程的名字  
  17.         t1.getName();           // 获取线程的名字  
  18.         t1.currentThread();     // 获取当前正在运行的线程对象,也就是获取自己本身    
  19.     }  
  20. }  

            2、线程控制

[java] view plain copy
  1. public class MyThread implements Runnable{// 实现Runnable接口  
  2.       
  3.     @Override  
  4.     public void run() {  
  5.         for(int i=1;i<101;i++) {  
  6.             try {  
  7.                 Thread.sleep(1000);  //线程休眠    与时间关联    处于线程阻塞状态  
  8.             } catch (InterruptedException e) {  
  9.                 // TODO Auto-generated catch block  
  10.                 e.printStackTrace();  
  11.             }  
  12.             System.out.println(Thread.currentThread().getName()+"=="+i);  
  13.         }  
  14.     }  
  15. }  
[java] view plain copy
  1. public class ComeTrue {  
  2.       
  3.     public static void main(String[] args) {  
  4.           
  5.         MyThread my =new MyThread(); // 创建真实对象  
  6.           
  7.         Thread t1 = new Thread(my,"线程一");  //创建代理对象  
  8.         Thread t2 = new Thread(my,"线程二");  //创建代理对象  
  9.           
  10.         // 后台线程  
  11.         // 设置后台(守护)线程---需要在线程启动之前设置  
  12.         // 守护线程:当最后一个非守护线程结束时,守护线程随着JVM一同结束工作    如:垃圾回收器  
  13.         t1.setDaemon(true);  
  14.           
  15.         t1.start(); // 启动线程  
  16.         t2.start(); // 启动线程  
  17.           
  18.         /* 
  19.          * 线程控制 
  20.          */  
  21.           
  22.         // 线程加入  
  23.         try {  
  24.             t2.join(); // 线程加入    等待设置为加入线程结束后,其他线程才开始运行      其他线程处于阻塞状态  
  25.         } catch (InterruptedException e) {  
  26.             e.printStackTrace();  
  27.         }  
  28.           
  29.         // 线程礼让  
  30.         t2.yield(); // 当t2抢夺到CPU时间片时,放弃一次,再次争夺   处于阻塞状态  
  31.           
  32.         // stop(): 线程终止   线程死亡  
  33.         // interrupt(): 线程中断   线程阻塞  
  34.     }  
  35. }