线程并发艺术之一:什么是线程

线程

定义不用多说,个人理解就是一条生产线(thread

生产线可以有多条,可以几乎是同时进行生产,但是能源(cpu资源是有限的,可以通过时间片来轮转获得cpu使用权),

生产线有些时候并不需要能源(这里比喻为能源可能欠妥,姑且称之为 核能吧,用之不竭的能源),比如需要等待原材料补充(IO操作,耗时较长,但是与cpu无关系),补充完之后才能继续生产线,制造产品。而对于工厂而言,生产机器能一直运行最好(压榨cpu),可以带来更大的利益。

多线程就是在某一个线程不使用(暂时不使用)cpu的时候,将cpu给需要的线程,这样保证了cpu尽可能的忙。

 

测试代码:


/**
 * 测试线程
 */
@Slf4j
class MyThread implements  Runnable{
private int id;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public MyThread(int id){
        this.id=id;
    }

    @Override
    public void run() {
        log.info("thread:{}",id);
    }
}
@Slf4j
public class TestThreadPool {
    @Test
    public void testThreadPool(){

    }
    @Test
    public void testThread(){
        int threadCount=10;
        //创建10个线程
        List<MyThread> threads=new ArrayList<>();
        for(int i=0;i<threadCount;i++){
            MyThread temp=new MyThread(i);
            threads.add(temp);
        }
        //等待所有线程启动完成
        for(MyThread thread:threads){
//            Causes this thread to begin execution; the Java Virtual Machine
//     * calls the <code>run</code> method of this thread.
            //start方法是让虚拟机去调用线程的run方法,会返回两个线程,
            // 一个是调用线程的线程(也就是主线程),另一个是被调用的线程
            //注意每个线程的start方法只能调用一次,执行完这个线程就结束了
            new Thread(thread).start();
        }
        //测试发现主线程不会被堵塞,先输出“我是主线程"  ,然后是乱序的   thread:*
        log.info("我是主线程");
    }
}

由测试结果可以看到:

1,start其他线程并不会阻塞主线程,反而是主线程先执行完

2,按照顺序start其他线程,但是实际执行顺序却不一定与代码start顺序一致(这点有时候让我苦恼,捉摸不透顺序)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值