1、什么是线程?
所谓线程是进程内部的一个控制序列流,不同的线程好像在独立运行并且有自己的cpu,但是线程间共享地址空间。
而每个进程都有自己独立的地址空间,一个进程内可以有多个并发运行的线程。
2、java种写线程有那些方法
(1)线程可以直接继承java.lang.Thread,你可以覆盖run方法来实现自己的功能。
(2)可以实现Runnable接口。(由于java不支持多继承,因此这种方法被广泛采用),必须实现run接口。在调用的时候可以用new Thread(new RunnableClass(), 'Threadname').start()
3、java线程内使用的一些基本方法
(1)如果run()方法已经完成了所需的工作,可以用yield()方法给调度一个暗示。
(2)sleep(),让线程休眠一段时间。必须放在try-catch块中,这是因为sleep的过程可能被中断。
(3)setPriority()设置优先级。
(4)setDaemon()设置为后台线程
isDaemon()判断是否为后台线程
(5)join()加入到目标线程,知道目标线程结束才继续执行。
例如有线程t1,t2
在t1中执行t2.join()。
那么t1要等到t2执行完了才可以继续执行。
4、java线程如何解决资源冲突问题
采用synchronized关键字来解决资源冲突的问题。
sychronized关键字修饰:
(1)限制对临界区的访问:当线程要执行被synchronized关键字包含的代码段的时候,他将检查信号量是否存在,然后获取代码,释放信号量。这段代码被成为“临界区”.
例子:
synchronized(syncObject){
....
}
这段代码的意思是,如果要进入该临界区,必须获得对象syncObject的锁。此对象未必为当前对象。
(2)限制对资源的访问:通过将所有访问这个资源的方法标记为synchronized,可以限制对资源的访问。此时,如果某个线程处在synchronized方法中,其他所有的想要进入任何synchronized方法的线程都将被阻塞。进入synchronized方法的线程相当于获得了该对象的锁,其他任何线程如果想进入synchronized方法都必须等前面的线程释放该对象的锁之后才可以。 |
|