分享

线程知识

 真爱图书 2012-02-14
1、什么是线程?线程是一个程序内部的顺序控制流。
2、线程和进程的区别?
     1)每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销。
     2)线程可以看成是轻量级的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器,开销小。
    3)多进程:在操作系统中能同时运行多个任务。
    4)多线程:在同一个应用程序中有多个顺序流同时执行。
3、线程实现的类:java.lang.Thread
4、实现方法:继承Thread或者实现Runnable,每个线程都是通过某个特定Thread对象所对应的方法run()来完成操作,方法run()成为线程体。通过Thread类得start()方法启动线程。
    例子://实现Runnable
/*
public class testThread {
 
 public static void main(String[] args) {
  Runner1 r = new Runner1();
  Thread t = new Thread(r);
  t.start();
  for(int i=10;i>0;i--){
   System.out.println("main--------"+i);
  }
 }
 
}
 class Runner1 implements Runnable{
 public void run() {
  for(int i=0;i<10;i++){
   System.out.println("Runner1------"+i);
  }
  
 }
 
}*/
//继承Thread
public class testThread {
 
 public static void main(String[] args) {
  Runner1 r = new Runner1();
  r.start();
  for(int i=10;i>0;i--){
   System.out.println("main--------"+i);
  }
 }
 
}
 class Runner1 extends Thread{
 public void run() {
  for(int i=0;i<10;i++){
   System.out.println("Runner1------"+i);
  }
   }
}
5、线程状态的转换:调用start()方法后,只是进入排队期,并不是立即执行;再分配时间期结束后,再次进入排队期,等待执行,即进入阻塞期。
6、线程控制的方法:
 
 
7、线程同步:访问同一个资源的多个线程之间来进行相互协调就是线程同步。
   1)synchronized() 用于锁定当前对象,只有执行完,锁打开后,其他线程才有机会执行。称为“互斥锁”,保证共享数据操作的完整性。当某个对象用synchronized()修饰时,表面该对象在任一时刻只能由同一个线程访问。
          例子:
     public class TestSync implements Runnable{
 Timer timer = new Timer();
 public static void main(String[] args) {
  TestSync test = new TestSync();
  Thread t1 = new Thread(test);
  Thread t2 = new Thread(test);
  t1.setName("t1");
  t2.setName("t2");
  t1.start();
  t2.start();
 }
 public void run() {
  timer.add(Thread.currentThread().getName());
  
 }
}
/*class Timer{
 private static int num=0;
 public void add(String name){
//第一种sysnchronized的使用方法
  synchronized (this) {//关键字sysnchronized 锁定当前对象 实现线程同步
  num++;
  try{
   Thread.sleep(1);
  }catch(InterruptedException e){
   
  }
  System.out.println(name+",你是第"+num+"个timer的线程");
   }
 }
}*/
class Timer{
 private static int num=0;
//第二种使用方法,放在方法声明中,表示整个方法为同步方法。
 public synchronized void add(String name){
  //synchronized (this) {//关键字sysnchronized 锁定当前对象 实现线程同步
  num++;
  try{
   Thread.sleep(1);
  }catch(InterruptedException e){
   
  }
  System.out.println(name+",你是第"+num+"个timer的线程");
   }
 //}
}
 
   

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多