• Java-多线程并发编程


    java-多线程并发编程:

    重新学习下多线程并发编程

    java基础:优先队列:PriorityQueue、数组赋值:System.arraycopy、二分搜索:Arrays.binarySearch

    查看死锁(面试会问,比较好玩):

    1. 命令行:jps
    2. 查看堆栈:jstack pid
    3. 可视化工具:jconsole
    

    死锁的创建与命令使用:

    import java.util.Arrays;
    
    /**
     * @ProjectName: test2
     * @Package: PACKAGE_NAME
     * @Description:
     * @Author: huyuqiao
     * @CreateDate: 2020/10/15 14:57
     */
    public class test2 {
        private static final Object A = new Object();
        private static final Object B = new Object();
    
        public static void main(String[] args){
    
           /* String[] arr = {"A","B","C","D","E","F"};
            System.arraycopy(arr, 3, arr, 0, 2);
            Arrays.stream(arr).forEach(System.out::println);*/
    
         /*   int a[] = new int[] {1, 3, 3, 3, 4, 6, 8, 9};
            System.out.println(Arrays.binarySearch(a, 1));*/
    
    /*        new Thread(() ->{
                synchronized (A){
                    try{
                        Thread.sleep(3000);
                    } catch (Exception e){
                        e.printStackTrace();
                    }
                    synchronized (B){
                        System.out.println("线程A");
                    }
                }
    
            }).start();
            new Thread(() -> {
                synchronized (B){
                    synchronized (A){
                        System.out.println("线程B");
                    }
                }
            }).start();*/
    
        }
    
    
    }
    
    

    ​ 线程创建:

    1. 继承Thread

      /**
       * @ProjectName: MyThread
       * @Package: PACKAGE_NAME
       * @Description:
       * @Author: huyuqiao
       * @CreateDate: 2020/10/15 16:57
       */
      public class MyThread extends Thread {
          @Override
          public void run() {
              System.out.println("当前线程: " + Thread.currentThread().getName());
          }
          public static void main(String[] args){
              MyThread myThread = new MyThread();
              myThread.setName("线程DEMO");
              myThread.start();
          }
      }
      
      
    2. 实现Runnable接口

      /**
       * @ProjectName: MyRunnable
       * @Package: PACKAGE_NAME
       * @Description:
       * @Author: huyuqiao
       * @CreateDate: 2020/10/15 17:00
       */
      public class MyRunnable implements Runnable {
      
          @Override
          public void run() {
              System.out.println("当前线程名: " + Thread.currentThread().getName());
          }
          public static void main(String[] args){
              MyThread myThread = new MyThread();
              myThread.setName("线程Runnable");
              myThread.start();
              myThread.run();
          }
      }
      
      
    3. 匿名内部类

              Thread thread = new Thread(new Runnable() {
                  @Override
                  public void run() {
                      System.out.println("当前线程名:" + Thread.currentThread().getName());
                  }
              });
              thread.start();
      
    4. lambda表达式

          public static void main(String[] args){
              new Thread(()->{
                  System.out.println("当前线程名: " + Thread.currentThread().getName());
              }).start();
          }
      
    5. 线程池

          public static void main(String[] args){
              ExecutorService ex = Executors.newSingleThreadExecutor();
              ex.execute(()->{
                  System.out.println("当前线程名;" + Thread.currentThread().getName());
              });
          }
      
  • 相关阅读:
    react.js+axios跨域
    O2O项目之一 环境搭配
    跟scss相关的两个包
    [nodemon] app crashed
    解决node.js链接数据库时出现的报错 --- client does not support authentication
    在Xshell 运行angular 项目时,找不到node-sass模块,安装node-sass模块时,又出现权限问题
    ajax请求数据时,get和post的区别
    web前端如何性能优化提高加载速度
    js数组去重
    前端跨域
  • 原文地址:https://www.cnblogs.com/meditation5201314/p/13822504.html
Copyright © 2020-2023  润新知