多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
#### 创建线程的两种方式 ``` class MyThread extends Thread{ //指定线程名称 public MyThread(String name) { super(name); } @Override public void run() { for (int i=0; i<100; i++){ System.out.println("i"+i); } } } ``` ``` class MyThread implements Runnable{ @Override public void run() { for (int i=0; i<100; i++){ System.out.println("i"+i); } } } ``` ``` 匿名内部类方式实现线程 Runnable r = new Runnable() { @Override public void run() { System.out.println(""); } }; new Thread(r).start(); ``` #### Thread和Runnable的区别 ``` 1. 如果一个类继承Thread,则不适合资源共享 2. 如果实现了Runable接口的话,则很容易的实现资源共享 ``` ### Runnable的优势 ``` 1. 适合多个相同的程序代码的线程去共享同一个资源 2. 可以避免java中的单继承的局限性 3. 增加程序的健壮性,实现解耦操作,代码可以被多个线程共享,代码和线程独立 4. 线程池只能放入实现Runable或Callable类线程,不能直接放入继承Thread的类 ``` 扩充 ``` 在java中,每次程序运行至少启动2个线程 一个是main线程,一个是垃圾收集线程 因为每当使用 java命令执行一个类的时候,实际上都会启动一个JVM,每一个JVM其实在就是在操作系统中启动了一个进程 ```