Java并发编程(1)

1.进程和线程的基本概念

进程:
进程可以理解为一个程序的实例,就可以理解为一个应用或程序,
当程序被运行时,会把磁盘中的程序代码加载到内存,同时开启一个进行;
线程:
可以理解为进程中的一条条指令流,线程是进程的子集,将一条条的指令按照一定的顺序交给CPU,
线程是Java中最小的调度单位。

2.并行与并发的概念

并发:同一个CPU内核处理不同的指令,并发(concurrent)是同一时间应对(dealing with)多件事情的能力;
并行:不同的CPU内核同时处理不同的指令,并行(parallel)是同一时间动手做(doing)多件事情的能力;

并发
并行

3.创建线程的三种方式:

     /**
     * 方法一:
     * 直接使用Thread匿名内部类的形式
     * 创建线程,调用线程Thread类的start方法执行线程体
     */
    @Test
    public void createThread1() {
        Thread th = new Thread(() -> {
            log.debug("线程体开始执行");
            try {
                Thread.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            log.debug("线程方法执行结束");
        });
        th.start();
    }

     /**
     * 方法二:
     * 使用Runnable接口,
     * 使用匿名内部类,重写run方法
     * 把创建的runnable接口引用放入Thread示例
     * 调用Thread的start方法执行线程体
     */

    public void createThread2() {
        Runnable r = () -> {
            log.info("to do someThing");
        };
        Thread re = new Thread(r);
        re.start();
    }


     /**
     * 方式三:
     * FutureTask 配合 Thread
     */
    @Test
    public void createThread3() throws ExecutionException, InterruptedException {
        // 创建任务对象
        FutureTask<Integer> task3 = new FutureTask<>(() -> {
            log.debug("hello");
            return 100;
        });
        // 参数1 是任务对象; 参数2 是线程名字,推荐
        new Thread(task3, "t3").start();
        // 主线程阻塞,同步等待 task 执行完毕的结果
        Integer result = task3.get();
        log.debug("结果是:{}", result);
    }

4.查看进程的方法

windows
任务管理器可以查看进程和线程数,也可以用来杀死进程
tasklist 查看进程
taskkill 杀死进程
linux
ps -fe 查看所有进程
ps -fT -p 查看某个进程(PID)的所有线程
kill 杀死进程
top 按大写 H 切换是否显示线程
top -H -p 查看某个进程(PID)的所有线程

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值