线程的概念

说起线程那必须得说进程和线程的概念了

一:什么是进程?

进程:一个运行的应用程序就叫做进程,列如:QQ,微信,电脑管家,进程里面包含了很多线程。

二:什么是线程?

线程:一个独立的正在运行的任务,叫做线程,比如说我们微信中的视频聊天,或者跟某人发消息,单独的叫做线程。

三:什么是多线程?

多线程:多个正在运行的任务,叫做多线程。比如我微信中我们既能跟张三发消息,同时还可以给李四通视频电话,这种就叫做多线程,在一个进程当中有多个任务在执行。

四:什么是高并发?

高并发:其实是多个任务再一个线程中运行就是高并发

五:实现线程的几种方法
1.继承extends Thread 重写run方法。

调用start()方法启动线程。

public class ThreadService {
    public static void main(String[] args) {
        //创建对象
        Test test = new Test();
        //启动线程
        test.start();

    }
    //新建一个类,继承Thread类
    static class Test extends Thread {
        //重新run方法
        @Override
        public void run() {
            System.out.println("我调用了thread线程");
        }
    }
}
2.实现implements Runnable 接口

将方法封装在Thread,调用start()方法。

public class RunnableService {
    public static void main(String[] args) {
        //创建对象
        Test test = new Test();
        //创建新城
        Thread thread = new Thread(test);
        //启动线程
        thread.start();

    }

    //新建一个类,实现Runnable接口
    static class Test implements Runnable {
        //重新run方法
        @Override
        public void run() {
            System.out.println("我调用了Runnable线程");
        }
    }
}
3.使用Callable和Future创建线程

和Runnable接口不一样,Callable接口提供了一个call()方法作为线程执行体,call()方法比run()方法功能要强大。call()方法可以有返回值,call()方法可以声明抛出异常

public class CallableService {
    public static void main(String[] args) throws Exception{
        //创建对象
        Test test = new Test();
        Integer call = test.call();
        System.out.println(call);

    }

    //新建一个类实现Callable接口
    static class Test implements Callable {

        @Override
        public Integer call() throws Exception {
            int a = 10;
            int b = 20;
            return a+b;
        }
    }
4. .使用线程池例如用Executor框架

最大优点是把任务的提交和执行解耦。要执行任务的人只需把Task描述清楚,然后提交即可。这个Task是怎么被执行的,被谁执行的,什么时候执行的,提交的人就不用关心了。

具体点讲,提交一个Callable对象给ExecutorService(如最常用的线程池ThreadPoolExecutor),将得到一个Future对象,调用Future对象的get方法等待执行结果就好了

Executor框架的内部使用了线程池机制,它在java.util.cocurrent 包下,通过该框架来控制线程的启动、执行和关闭,可以简化并发编程的操作。

六:Thread类的常用方法:
  1. start():启动当前线程并调用线程的run()方法
  2. run():将创建线程要执行的操作声明在此
  3. currentThread():静态方法,放回当前代码执行的线程
  4. getName():获取当前线程的名字
  5. setName():设置当前线程的名字
  6. yield():释放当前cpu的执行权
  7. join():在线程A中调用线程B的join方法,使得线程A进入阻塞状态,直到线程B完全执行完,线程A才结束阻塞状态
  8. stop():已过时,在执行此方法时,强制结束该线程
  9. sleep(long long millis):让当前线程睡眠指定的millis毫秒时间内(睡眠即当前线程为阻塞状态)
  10. isAlive():判断当前线程是否还存活
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值