JAVA复习之多线程

java中多线程同步是什么?

在多线程程序下,同步能控制对共享资源的访问。如果没有同步,当一个java县城在修改一个共享变量时,另外一个线程正在使用或者更新同一个变量,这样容易导致程序出现错误。

解释实现多线程的几种方法?区别是什么?

Java线程可以实现Runnable接口或者继承Thread类来实现,当你打算多重继承时, 优先选择实现Runnable启动方法不一样。Thread1继承,Thread2实现Runnable接口,则启动一个Thread1线程可以使用new Thread1().start(),而启动Thread2线程则new Thread(new Thread2()).start()。

Thread.start()与Thread.run()有什么区别?

run()方法:在本线程内调用该Runnable对象的run()方法,可以重复多次调用;

start()方法:启动一个线程,调用该Runnable对象的run()方法,不能多次启动一个线程;

​​​​​​​为什么需要run()和start()方法,我们可以只用run()方法来完成任务吗?

我们需要run()&start()这两个方法是因为JVM创建一个单独的线程不同于普通方法的调用,所以这项工作由线程的start方法来完成,start由本地方法实现,需要显式地被调用,使用这两个方法的另外一个好处是任何一个对象都可以作为线程运行,只要实现了Runnable接口,这就避免了因继承了Thread类而造成的java的多继承问题。

什么是ThreadLocal类,怎么使用它?

ThreadLocal是一个线程级别的局部变量,并非“本地线程”。ThreadLocal为每个使用该变量的线程提供了一个独立的变量副本,每个线程修改副本时不影响其他线程对象的副本

线程局部变量(ThreadLocal variables)的关键点:

一个线程局部变量为每个线程方便的提供了一个单独的变量。Threadlocal实例通常作为静态的私有的字段出现在一个类中,这个类用来关联一个线程。当多个线程访问ThreadLocal实例时,每个线程维护ThreadLocal提供的独立的变量副本。常用的使用可在Dao模式中见到,当Dao类作为一个单例类时,数据库连接被每一个线程独立的维护,互不影响。

猜你喜欢

转载自blog.csdn.net/qq_31914787/article/details/82861505