码迷,mamicode.com
首页 > 编程语言 > 详细

实现线程的第二种方法

时间:2015-05-23 14:21:03      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

实现线程的第二种方法
     提供一个实现接口Runnable的类作为线程的目标对象,在初始化一个Thread类或Thread子类的线程对象时,把目标对象传递给这个线程实例,由该目标对象提供线程体。
代码示例:
public class Runnablempl implements Runnable {
 public void run() {
 for(int i=0;i<30;i++){
  System.out.println("Runnable-->"+i);
  if(i==15){
   try {
    Thread.sleep(2000); //休眠2000毫秒
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
 }
 }


public class Test {
 public static void main(String[] Args){
  //生成一个Runnable接口实现类对象
  Runnablempl ri=new Runnablempl();//ri  代表线程体
  //生成一个Thread对象,并将Runnable接口实现类的对象作为参数
  //传递给该Thread对象
  Thread t=new Thread(ri);
  //设置优先级(1~10),可以使用Thread所提供的静态常量来设  //置线程的优先级
  t.setPriority(Thread.MAX_PRIORITY);  
  //通知Thread对象执行start方法
  t.start();   //t 代表线程
  System.out.println(t.getPriority());
 }

}


线程的简单控制方法
·中断线程
  — Thread.sleep() //使线程休眠
  — Thread.yield() //释放CPU,重新来争夺CPU的控制权
·设置线程的优先级
  — getPriority() //获取线程优先级
  — setPriority() //设置优先级

多线程数据安全
    当多线程共用一个方法体时,要加锁,不然会产生数据重复使用。
      关键字:synchronized(this){加锁后要执行的代码,直到代码执行完后才开锁 }

public class MyThread implements Runnable {
 int i=30;
//复写run方法
 public void run() {
  while(true){
   //加锁
   synchronized(this){
   //currentThread()方法是Thread()的静态方法,
   //用来获取这段代码正在那个线程当中运行
   System.out.println(Thread.currentThread().getName()+i);
   i--;
   Thread.yield();
   if(i<0){
    break;
   }
  }
  }
  
 }

}


public class Test1 {
 public static void main(String[] Args){
  MyThread myThread=new MyThread();
  //生成两个Thread对象,但是这两个Thread对象共用同一个线程体
  Thread t1=new Thread(myThread);
  Thread t2=new Thread(myThread);
  //每一个线程都有名字,可以使用getName方法设置线程名字,
  //也可以使用getName方法获取线程名字;
  t1.setName("线程a");
  t2.setName("线程b");
  t1.start();
  t2.start();
 }
}

 

实现线程的第二种方法

标签:

原文地址:http://blog.csdn.net/lilu920923/article/details/45933475

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!