实现线程的第二种方法

提供一个实现接口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();

}

}

时间: 2024-10-12 02:35:27

实现线程的第二种方法的相关文章

创建线程的两种方法

第一种:继承Thread类 子类覆写父类的run方法,将线程代码写在run()中. 建立子类对象,些时线程也被创建了. 通过start方法启动线程. 第二种:实现Runnable接口 子类覆盖接口的run方法,将线程代码写在run()中. 通过Thread类创建线程,并将实现Runnable接口的子类对象作为参数传递给Thread类的构造函数. Thread对象调用start方法启动线程. 两者的比较: 继承Thread类,相对简单,但因为单继承的局限性,同份资源不共享,而不建议使用:而实现Ru

【java】终止线程的三种方法

有三种方法可以使终止线程. 1.  使用退出标志,使线程正常退出,也就是当run方法完成后线程终止. 2.  使用stop方法强行终止线程(这个方法不推荐使用,因为stop和suspend.resume一样,也可能发生不可预料的结果). 3.  使用interrupt方法中断线程.     1. 使用退出标志终止线程 当run方法执行完后,线程就会退出.但有时run方法是永远不会结束的.如在服务端程序中使用线程进行监听客户端请求,或是其他的需要循环处理的任务.在这种情况下,一般是将这些任务放在一

Java创建线程的第二种方式:实现runable接口

/*需求:简单的卖票程序多个窗口买票 创建线程的第二种方式:实现runable接口 *//*步骤1.定义类实现Runable接口2.覆盖Runable接口中的run方法    将线程要运行的代码存放在该run方法中 3.通过Thread类建立线程对象4.将Runable接口的子类对象作为实际参数传递给Thread类的构造函数  为什么要将Runable接口的子类对象传递给Thread的构造函数.  因为,自定义的run方法所属的对象是Runable接口的子类对象  所以要让线程去指定对象的Run

【 Thread】创建线程的2种方法

(一)Thread类 1.结构 java.lang.Object |---java.lang.Thread 2.创建线程的两种方法 (1)一种方法是将类声明为Thread的子类,该子类应重写Thread类的run方法 class PrimeThread extends Thread {          long minPrime;          PrimeThread(long minPrime) {              this.minPrime = minPrime;      

iOS 清理缓存功能的实现第二种方法

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 /**  *  清理缓存第二种方法  *  *  @param sender <#sender description#>  */ - (void)clearCache:(id)sender {     //彻底清除

教你关闭AOPR的第二种方法

众所周知,点击AOPR软件界面右上角红色的关闭按钮即可关闭该Office密码破解软件,但是在某些情况下"关闭"可能不可用,此时掌握其他关闭软件的方法十分必要.本文指导关闭Advanced Office Password Recovery的第二种方法. AOPR软件文件菜单中的"退出"命令 一般打开或保存文件时,用户使用Advanced Office Password Recovery文件菜单较为频繁,但是在这项菜单下还隐藏着一项"退出"命令哦,如

线程创建的第二种方法

第一种方法是继承并且重写run方法(不推荐使用) 第二种就是有爹的情况,用实现接口的形式拓展功能--实现Runnable接口 Runnable中只有run()方法 今天复习同步线程代码时候卡在一个问题上: class SynThread implements Runnable { run() { } } class Main { public static void main(string [] args) { SynThread syn=new SynThread(); Thread a=ne

线程管理四种方法

进程:程序在计算机的一次运行活动,一个程序就是一个进程,在iOS中一个app就是一个进程 线程:程序运行的最小单元,一个进程中至少有一个线程(主线程) 一. 通过NSObject的方法管理线程 这种方法会帮助我们自己主动开辟一个后台线程,不须要自己创建 參数:(1)在这个后台线程中运行的方法 參数:(2)用于传递參数,没有为nil [self performSelectorInBackground:@selector(banZhuanPlus) withObject:nil]; } 二.通过NS

终止线程的三种方法

有三种方法可以使终止线程. 1.  使用退出标志,使线程正常退出,也就是当run方法完成后线程终止. 2.  使用stop方法强行终止线程(这个方法不推荐使用,因为stop和suspend.resume一样,也可能发生不可预料的结果). 3.  使用interrupt方法中断线程. 1. 使用退出标志终止线程 当run方法执行完后,线程就会退出.但有时run方法是永远不会结束的.如在服务端程序中使用线程进行监听客户端请求,或是其他的需要循环处理的任务.在这种情况下,一般是将这些任务放在一个循环中