线程与进程的区别:
进程是线程的容器,不同进程间相互独立,同一进程不同线程间资源共享。
进程间通信需要特殊方法,比如管道,线程间通信可以通过共享变量。
java有两种方法创建线程,优先使用Runnable接口,因为java只支持单继承。
简单的线程调度:
常用方法:
sleep()是静态方法。
重写run()方法不能throws Exception。
终止线程最好方法:可以设置一个boolean变量。
synchronized
1.修饰方法放到public后面(不能被继承)
同一时间只有一个线程可以访问synchronized方法,当一个线程调用一个synchronized方法时,其他线程想要再调用该方法,或调用该类其他synchronized方法时会被阻塞,但可以调用其他非synchronized方法
2.修饰代码块(锁定某个对象或当前对象)
synchronized(this) {
代码
}
总结:无论synchronized关键字加在方法上还是对象上,如果它作用的对象是非静态的,则它取得的锁是对象;如果synchronized作用的对象是一个静态方法或一个类,则它取得的锁是对类,该类所有的对象同一把锁。