但是这个对象和普通类中声明的对象不一样,不是分配在对空间中的;而是,JVM会给每个线程分配一个栈空间,这个和普通对象还是有区别的
可以使用同一个Runnable实例作为参数构造多个线程,实现数据共享
并不是main方法是线程,它只是主函数线程栈中的一个栈帧,也就是说Java程序运行中有一个线程是负责执行主方法的。
start()方法启动线程,调度是由Java虚拟机调度的,线程的run()方法执行结束时,这个线程也就结束了;start()方法只能调用一次,不能重复调用,会报错Java中任何一段代码都是被某一个线程所执行(所有线程都是执行main函数的主线程创建的,可以嵌套),通过static Thread currentThread()静态方法查看当前代码段被哪个线程所执行同时,一段代码可以被多个线程执行,比如实现Runnable方法创建线程时,使用同一个Runnable实例就是这种效果
多个线程对临界区进行读+改+写,会导致脏读或者丢失修改(一个线程读了另一个线程写之前的,或者两者同时写一个变量等)
多个线程判断+执行,其中判断条件的更改无法同步导致的错误执行
public class RaceState { public static void main(String[] args) throws InterruptedException { ThreadTask threadTask = new ThreadTask(); Thread thread1 = new Thread(threadTask); Thread thread2 = new Thread(threadTask); Thread thread3 = new Thread(threadTask); Thread thread4 = new Thread(threadTask); thread1.start(); //Thread.currentThread().sleep(1000); thread2.start(); thread3.start(); thread4.start(); } static class ThreadTask implements Runnable{ private int count = 0; @Override public void run() { do{ count++; showCount(); }while (count < 100); } private void showCount(){ System.out.println(Thread.currentThread().getName() + ":" + count); } } }可以看出 两个线程出现了冲突