zoukankan      html  css  js  c++  java
  • Java FAQ

    1. Jar包本来在project structure中,按绿色按钮也可以执行,但从命令行就会报错:找不到对应的包。
      Idea为了从命令行编译程序,必须将jar包的路径添加到系统变量classpath中,再在idea中project structure中添加该jar,重启计算机。

    多线程

    Java有2种方式实现多线程:

    继承Thread

    单线程程序即只有主方法的线程,该线程由JVM负责启动,其他线程由程序员负责启动。Thread类中实例化的对象代表一个线程,继承后重写run()方法,将该线程的功能实现放在run()方法中,调用Thread类中的start()方法启动线程,start()方法会调用覆盖后的run()方法。

    public class Test extends Thread {
        public void run() {
            System.out.println("Hello");
        }
        public static void main(String[] args) {
            new Test().start();
        }
    }
    

    实现Runnable接口

    第一种方法的缺陷在于:如果程序需要继承其他类而非Thread类,但Java是单继承语言,此时就无法通过该方式实现多线程,此时就需要采用第二种方法。创建Runnable对象后,将其传递给Thread类的构造方法,调用start()方法即可。

    public class Test {
        public static void main(String[] args) {
            Runnable runnable = new Runnable() {
                @Override
                public void run() {
                    System.out.println("Hello");
                }
            };
    
            Thread thread = new Thread(runnable);
            thread.start();
        }
    }
    

    这里比较疑惑的地方在于:Java中接口和抽象类是不能实例化的,即Runnable接口是不能实例化的,但是代码中却new Runnable()。这里实际上首先构造了一个implements Runnable的匿名内部类,然后构造了该类的一个实例,接着用Runnable表示该类的类型。

    不使用匿名内部类:

    public class Test implements Runnable {
        @Override
        public void run() {
            System.out.println("Hello");
        }
    
        public static void main(String[] args) {
            Test hello = new Test();
            Thread thread = new Thread(hello);
            thread.start();
        }
    }
    
  • 相关阅读:
    细思极恐-你真的会写java吗?
    java定时器无法自动注入的问题解析(原来Spring定时器可以这样注入service)
    java并发编程之volatile
    细思极恐-你真的会写java吗?
    细思极恐-你真的会写java吗?
    细思极恐-你真的会写java吗
    1月中旬值得一读的10本技术新书(机器学习、Java、大数据等)!
    0基础小白怎么学好Java?
    java日常知识点积累
    (解决)ECSHOP info: Can't Connect MySQL Server(localhost:3306)!转删
  • 原文地址:https://www.cnblogs.com/EIMadrigal/p/11801845.html
Copyright © 2011-2022 走看看