黑马程序员——看完毕老师的多线程视频,多线程的小总结

来源:互联网 发布:mac html 编译器 编辑:程序博客网 时间:2024/06/10 23:57

----------------------<a href="http://edu.csdn.net/heima"target="blank">android培训</a>、<a href="http://edu.csdn.net/heima"target="blank">java培训</a>、期待与您交流! ----------------------

一、线程的基本概念
简单的说:线程就是一个程序里不同的执行路径
在同一个时间点上cpu只会有一个线程在执行
Java里的多线程是通过java.lang.Thread类来实现的
每个线程都拥有自己独立的方法栈空间
二、java线程的创建和启动
第一种
定义线程类实现Runnable接口
Thread myThread = new Thread(target) //target为Runnable接口类型
Runnable中只有一个方法:
public void run();用以定义线程运行体
第二种
可以定义一个Thread的子类并重写其run方法:
  clas MyThread extends Thread{
   public void run(){}
  }
线程类必须通过执行Thread的start()方法启动一个新的线程
如果调用run()方法是属于方法的调用,不会启动一个新的线程

class Test extends Thread
{     
  
  private String name;
   Test(String name)
  
   {
    this.name=name;
    //super(name);
   
   }
   public void run()
   {
    for(int i=0;i<70;i++)
    {
     System.out.println(name+"...."+i);
     System.out.println(Thread.currentThread().getName()+"...."+i);
     //static Thread currrentThread() 获取线程的对象
    }
   }

}
public class Text
{
public static void main(String[] args)
 
{
  Test t1 = new Test("one");
  Test t2 = new Test("two");
  t1.start();
  t2.start();
  //t1.run();
  //t2.run();
 
  for(int i=0;i<70;i++)
  {
   System.out.println("main...."+i);
  }
 
}

}
三、线程同步
实现java.lang.Runnable接口

每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程。每个线程都可以或不可以标记为一个守护程序。当某个线程中运行的代码创建一个新 Thread 对象时,该新线程的初始优先级被设定为创建线程的优先级,并且当且仅当创建线程是守护线程时,新线程才是守护程序。

当 Java 虚拟机启动时,通常都会有单个非守护线程(它通常会调用某个指定类的 main 方法)。Java 虚拟机会继续执行线程,直到下列任一情况出现时为止

同步代码块
synchronized(this){  //在执行代码块过程中,不会被其他线程打断
  ... 
}


class Tick implements Runnable
{     
  
  private int tick=100;
  Object obj = new Object();
   boolean flag = true;
   public void run()
   {
    if(flag)
    {
     while(true)
     {
      synchronized(this)
      {
       if(tick>0)
       {
        try{Thread.sleep(10);}catch(Exception e){}
        System.out.println(Thread.currentThread().getName()+"...,,.."+tick--);
        //static Thread currrentThread() 获取线程的对象
       }
      }
     }
    }
    
     else
      while(true)
     
             show();
    }
  
   public synchronized void show()
   {
    if(tick>0)
    {
     try{Thread.sleep(10);}catch(Exception e){}
     System.out.println(Thread.currentThread().getName()+"...,,.."+tick--);
     //static Thread currrentThread() 获取线程的对象
    }
   }

}
public class Text
{
public static void main(String[] args)
 
{
  Tick t =new Tick();
  Thread t1 = new Thread(t);
  Thread t2 = new Thread(t);
//  Thread t3 = new Thread(t);
//  Thread t4 = new Thread(t);
  t1.start();
  try{Thread.sleep(10);}catch(Exception e){}
  t.flag =false;
  t2.start();
//  t3.start();
//  t4.start();
 
}

}

----------------------<a href="http://edu.csdn.net/heima"target="blank">android培训</a>、<a href="http://edu.csdn.net/heima"target="blank">java培训</a>、期待与您交流! ----------------------

原创粉丝点击