• java并发编程-进程与线程


    进程与线程的概念

    程序是由指令和数据组成的, 但是指令需要运行, 数据要读写, 就必须将指令加载至cpu, 数据加载至内存。

    java中线程是最小的调度单位, 进程是资源分配的最小单位。

    进程: 当一个程序被运行, 从磁盘加载这个程序的代码至内存, 这时就开启了一个进程。

    线程: 一个进程可以分为多个线程, 一个线程就是一个指令流,指令流中的指令交给CPU执行。

    进程通信: 同一台计算机的进程通信称为IPC, 不同计算机通信需要通过网络, 遵守共同的协议, 例如http协议。

    线程通信: 在进程内,共享进程的内存, 多线程可以共享变量。

    并行和并发的区别

    并发: 是指一个处理器同时处理多个任务。 

    并行: 是指多个处理器同时处理多个不同的任务。 

    线程的基本应用

    1.异步调用:不需要方法的返回就能继续运行。

    2.同步调用:需要方法的返回才能继续运行。

    3.多线程应用之提高效率

    案例一:

    充分利用多核cpu核数优势, 并行计算, 相互计算之间没有依赖关系, 最后汇总结果。

    4.创建和运行线程

    第一种创建线程的方法:

    public class CreateThread {
        private static final Logger LOG = LoggerFactory.getLogger(CreateThread.class);
    
        public static void main(String[] args) {
    
            Thread thread1 = new Thread("thread1"){
                @Override
                public void run() {
                    LOG.info("info2");
                }
            };
    
            thread1.start();
            LOG.info("info1");
        }
    }

    第二种创建线程的方法(推荐使用):

    public class CreateThread2 {
        private static final Logger LOG = LoggerFactory.getLogger(CreateThread2.class);
        public static void main(String[] args) {
    
            Runnable runnable =new Runnable() {
                @Override
                public void run() {
                    //执行的任务
                    LOG.info("running");
    
                }
            };
    
            //创建线程
            Thread t = new Thread(runnable,"t2");
            t.start();
    
        }
    }

    jdk1.8之后使用lambda表达式创建线程精简代码:

    如果接口带有@FunctionalInterface注解和只有一个抽象方法就可以使用lambda表达式, Runnable源码:

    @FunctionalInterface
    public interface Runnable {
        /**
         * When an object implementing interface <code>Runnable</code> is used
         * to create a thread, starting the thread causes the object's
         * <code>run</code> method to be called in that separately executing
         * thread.
         * <p>
         * The general contract of the method <code>run</code> is that it may
         * take any action whatsoever.
         *
         * @see     java.lang.Thread#run()
         */
        public abstract void run();
    }

    lambda表达式(Alt+Enter快捷键转成lambda):

    public class CreateThread2 {
        private static final Logger LOG = LoggerFactory.getLogger(CreateThread2.class);
        public static void main(String[] args) {
    
            Runnable runnable = () -> {
                //执行的任务
                LOG.info("running");
    
            };
    
            //创建线程
            Thread t = new Thread(runnable,"t2");
            t.start();
        }
    }

    创建多线程第三种创建线程的方法, FutrueTask配合Thread: 

    public class CreateThread {
        private static final Logger LOG = LoggerFactory.getLogger(CreateThread.class);
    
        public static void main(String[] args) throws ExecutionException, InterruptedException {
    
            FutureTask<Integer> futureTask =new FutureTask<Integer>(new Callable<Integer>() {
                @Override
                public Integer call() throws Exception {
                    LOG.info("running");
                    Thread.sleep(2000);
                    return 100;
                }
            });
    
            Thread t1 =new Thread(futureTask,"t1");
            t1.start();
    
            LOG.info("{}", futureTask.get());
        }
    }

    5.

  • 相关阅读:
    python3-day6(模块)
    python3-day5(模块)
    python3-day4(re正则表达式,冒泡)
    python3-day4(递归)
    python3-day4(装饰器)
    python3-day3(内置函数)
    python3-day3(函数-参数)
    python3-day3(函数-返回值)
    android 开发学习3
    android 开发学习2
  • 原文地址:https://www.cnblogs.com/chong-zuo3322/p/14177829.html
Copyright © 2020-2023  润新知