ThreadStudy01

线程相关

线程是系统最小的执行单元,共享进程资源,在线程的交互中,线程有两个交互的状态:

  • 互斥
  • 同步

由run()方法执行工作的实际代码

线程方法

创建类

1
2
3
4
5
Thread()
Thread(String name)
Thread(Runnable target)
Thread(Runnable target,String name)
`

用于创建线程,给线程注上线程的名字

线程方法

1
2
3
4
5
6
7
8
start()
sleep()//线程休眠的方法
void join()
void join(Long millis)
void join(long millis,int nanos)//join方法使其他的线程等待
//当前线程停止
static void yield()//让当前线程让出资源,让其他线程执行
Thread currentThread() // 返回当前线程的引用

停止线程

  • 不要使用stop()方法停止线程
  • 使用退出标志退出线程:利用while和一个flag状态变量去停止线程
  • isInterrupt()方法判断线程是否停止,但是如果使用了sleep()或者join()方法那个停止的状态会被清除,并且会返回一个interruptException

实例变量的非线程安全

如果多个线程访问一个对象中的实例变量,则可能出现非线程安全

  • 如果用线程访问的对象如果有多个实例变量则有可能出现交叉
  • 如果只有一个变量则有可能出现覆盖

在被访问的方法前使用synchronized关键字,当线程访问该方法就会获得该对象的线程锁,别的线程是无法访问的。通过同步获得线程锁是对象的线程锁,而不是函数或者某一段代码块的。

有关线程共享资源

  • 基础类型的局部变量:这种局部变量是线程安全的
  • 局部的对象引用:是线程安全的
  • 对象成员:对象成员存储在堆上面,两个线程同时更新一个对象的同一个成员会出现非线程安全