一个进程包含多个线程
一个线程只能跑在一个核上
必须调用start方法,才能开辟一个新的线程
1.
2.
3.
4.
5.
6.
两种创建线程的方式 implements Runnable 和extends Thread
×
√
7. 线程的安全性
import java.util.ArrayList; import java.util.List; /** * @author sr * @date 2021/1/18 */ public class ThreadTest { public static List<Integer> LIST = new ArrayList<>(); public static void main(String[] args) { for (int i = 0; i < 5; i++) { Thread t =new Thread(new MyRun()); t.start(); } System.out.println("-------------list共有" + LIST.size() + "个数据."); } }
/** * @author sr * @date 2021/1/18 */ public class MyRun implements Runnable{ @Override public void run() { System.out.println("添加了一个数据"); for (int i = 0; i < 100; i++) { ThreadTest.LIST.add(i); } } }
但是也有 下标越界异常
8. vector 也是List的一种
public static List<Integer> LIST = new Vector<>();
vector所有方法前面都有synchronized
线程排队执行
import java.util.List; import java.util.Vector; /** * @author sr * @date 2021/1/18 */ public class ThreadTest { public static List<Integer> LIST = new Vector<>(); public static void main(String[] args) { for (int i = 0; i < 5; i++) { Thread t =new Thread(new MyRun()); t.start(); } try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("-------------list共有" + LIST.size() + "个数据."); } }
/** * @author sr * @date 2021/1/18 */ public class MyRun implements Runnable{ @Override public void run() { System.out.println("添加了一个数据"); for (int i = 0; i < 100; i++) { ThreadTest.LIST.add(i); } } }
9. HashTable是线程安全的,HashMap是线程不安全的