多线程的实现和常用操作方法

2021-05-11 14:27

阅读:563

标签:意思   void   实例   包装   就是   tar   row   task   stop   

一、多线程的实现

1.继承 Thread 类

java.lang.Thread是一个线程操作的核心类。新建一个线程最简单的方法就是直接继承Thread类,而后覆写该类中的run()方法(就相当于主类中的main方法)

public class MyThread extends Thread{
    @Override
    public void run() {
        System.out.println("MyThread is run");
    }
}
MyThread myThread = new MyThread();//创建myThread实例
myThread.start();//启动线程

2.实现Runnable接口

public class MyThread implements Runnable{//实现Runnable接口
    @Override
    public void run() {
        System.out.println("MyThread is run");
    }
}
MyThread myThread = new MyThread();
Thread thread = new Thread(myThread);//将自己的myThread传入Thread
thread.start();//启动线程

3.实现Callable接口,重写call函数

public interface Callable   {  //Callable接口
    V call() throws Exception;   
} 
public class SomeCallable extends OtherClass implements Callable {
    @Override   //@Override注解表明重写call()方法
    public V call() throws Exception {
        // TODO Auto-generated method stub
        return null;
    }
}
Callable oneCallable = new SomeCallable();   //由Callable创建一个FutureTask对象:   
FutureTask oneTask = new FutureTask(oneCallable);   //FutureTask是一个包装器,它通过接受Callable来创建,它同时实现了Future和Runnable接口。 
Thread oneThread = new Thread(oneTask);   //由FutureTask创建一个Thread对象
oneThread.start();   //线程创建完成。

二、多线程常用操作方法

1.线程休眠 sleep()

线程休眠:指让线程暂缓一下,到了预计时间再执行。
线程休眠的时候会让出CPU,让CPU执行其他的任务,但是sleep方法不会释放锁,也就是说当前线程持有对某个对象的锁的时候,其他线程无法访问这个对象。

2.线程让步 yield()

调用这个方法会暂停当前线程对象,并执行其他线程。
yield方法会让当前线程交出CPU权限,让CPU执行其他的线程,同样也不会释放锁。但是yield不能控制让出CPU的时间。yield方法只能让拥有相同优先级的线程有获取CPU执行时间的机会。
调用yield方法并不会让线程进入阻塞状态,而是让线程重回就绪状态,它只需要等待重新获取CPU执行时 间,这一点是和sleep方法不一样的。

3.join()方法

等待该线程终止。意思就是如果在主线程中调用该方法时就会让主线程休眠,让调用该方法的线程run方法先执行完毕之后在开始执行主线程。

4.wait()方法

wait()方法是让当前线程进入等待状态,同时,wait()也会让当前线程释放它所持有的锁,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法”,当前线程被唤醒(进入“就绪状态”)。

5.线程停止

多线程中有三种方式可以停止线程。
①. 设置标记位,可以是线程正常退出。
②. 使用stop方法强制使线程退出,但是该方法不安全。
④. 使用Thread类中的一个interrupt() 可以中断线程。

多线程的实现和常用操作方法

标签:意思   void   实例   包装   就是   tar   row   task   stop   

原文地址:https://blog.51cto.com/14298563/2505091


评论


亲,登录后才可以留言!