Java的多线程

一、创建
1、新建一个类,实现Runnable接口,重写run方法,在run方法内写要完成的任务,在main函数中,使用该类的对象 .run(),此时是使用main方法的线程,并非新建一个线程。

class Task implements Runnable{
    @override
    public void run(){
        //.....................
    }
}

public  class TestThread{
    public static void main(String[] args) {
        Task task = new Task();
        task.run();  //此处使用的是main方法的线程
    }
}

2.新建一个类,实现Runnable接口,重写run方法,在run方法内写要完成的任务,在main函数中,将该类实例作为新建Thread的参数,该新建线程调用 .start() ,开启一个新的线程。

class Task implements Runnable{
    @override
    public void run(){
        //.....................
    }
}
public  class TestThread{
    public static void main(String[] args) {
        Thread thread = new Thread(new Task());
        thread.start(); //新启一个线程
    }
}

3、新建一个类,实现Runnable接口,使用线程池

class Task implements Runnable{
    @override
    public void run(){
        //.....................
    }
}
public class TestThread {
    public static void main(String[] args){
        ExecutorService exec = Executors.newCachedThreadPool();  //此处使用线程池
        for(int i=0;i<1;i++){
            exec.execute(new Task());
        }
    }
}

4.直接继承Thread类

class Task extend Thread{
    public void run(){
        //.....................
    }
}

public case class TestThread{
    public static void main(String[] args) {
        Task task = new task()
        task.start(); //新启一个线程
    }
}

二、

Runnable接口的理解:具有一个run()方法,其在线程开启时 .start() 会运行。
实现Runnable接口的类不具有创建线程的能力,其被作为构造函数的变量
Thread(Runnable target)
Thread(Runnable target, String name)
起到的作用是将一个活动的任务交给该线程。

Thread具有创建线程的能力,其常用的方法:

start
启动线程并自动执行run方法

run
包含需要执行的代码

sleep
将线程进入休眠状态,但不释放对象锁

yield
便是可以让出cpu,具体让不让由cpu决定

join
使用t.join()加入一个线程t,使用了该语句的线程将被挂起直到线程t生命结束才恢复,不过可以为join方法设置一个超时参数,若超时则join方法总能返回

interrupt
使线程中断

wait方法和notify方法
wait方法:在其他线程调用对象的notify方法或者notifyAll方法前,或者超过指定的时间量前,导致当前线程等待。线程调用wait方法,释放它对锁的拥有权,然后等待另外的线程来通知它(通知的方式是notify或者notifyAll方法),这样它才能重新获得锁的拥有权和恢复执行。

notify方法:唤醒一个等待当前对象的锁的线程。notify方法应该是被拥有对象的锁的线程所调用。被唤醒的线程是不能被执行的,需要等到当前线程放弃这个对象的锁。

notifyAll方法:唤醒所有等待锁的线程。

上面的三个方法要求在调用时线程已经获得了对象的锁,因此对这两个方法的调用需要放在synchronized方法或synchronized块中。

setDaemon
将线程设置为后台线程,需要在线程启动之前设置,isDaemon检查是否为后台线程,当所有非后台线程结束时,后天线程自动死亡

setPriority(int priorityLevel)
设置优先级(0-10),使用 getPriority()可以获取线程的优先级

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值