当我们给计算机一个任务时,对于计算机来讲,即进行了一个进程,每一个进程中包含一个或多个线程,有时多个线程会对同一个资源进行修改,即发生线程并发问题。
线程创建的三个方式:
extends Thread、implements Runnable、implements callable(一般不用)
首先是第一个 ,继承Thread类,再main函数中 new一个对象,然后调用start()方法,就开始执行run()方法体中的内容,主线程main和run交替执行,因为cpu调用速度很快,所以在我们看来就是同时执行的
code:
result:
然后是实现Runnable,其实Thread也是实现了Runnable接口,在重写run()的时候,添加了其他的方法,这时就应该在main()方法体中创建线程对象(其实是一种静态代理机制,真实对象和目标对象实现的都是Runnable接口)
至于最后一个Callable,类在实现Callable接口的时候,首先要重写call()方法,这是一个具有返回值的方法,并且Callable与Future结合,可跟踪异步计算的结果,目前自己还是菜鸟,这个方法应该也是用不到(其实是没看懂)
然后是守护线程和用户线程 一般的都是用户线程,默认的setDaemon()值为false,JVM会确保用户线程执行完毕,而守护线程setDaemon()值为true,JVM不用等待其执行完毕
防止线程不安全的方法一个是synchronized设置方法或对象(也可以是类),一个代码块中synchronized中的Obj就是被同步的,即必须等待一个线程修改完毕其他线程才能进行修改
线程通信 操作线程.wait()方法或者操作线程.notify()方法,一个是等待,一个是通知