Rhythmk 一步一步学 JAVA (21) JAVA 多线程
时间:2022-03-21 06:14
1、JAVA多线程简单示例
1.1 、Thread 集成接口 Runnable
1.2 、线程状态,可以通过 Thread.getState()获取线程状态:
New (新创建)
Runnable (可以运行)
Blocked (被阻塞)
Waiting (等待)
Timed waiting (计时等待)
Terminated (被终止)
?
package
com.rhythmk.filedemo;
public class Thread_demo {
public
static void main(String[] args) {
MyThread td = new
MyThread();
td.SetTitle( "td1" );
td.start();
td = new
MyThread();
td.SetTitle( "td2" );
td.start();
}
}
class
MyThread extends
Thread {
private
String title;
public
void SetTitle(String str) {
this .title = str;
}
@Override
public
void run() {
for
( int i = 0 ; i < 10 ; i++) {
System.out.println(String.format( " num:%d,\"Title\":%s" , i,
this .title));
// 休眠当前线程
try
{
Thread.sleep( 1000 );
} catch
(InterruptedException e) {
e.printStackTrace();
}
}
}
} |
http://programming.iteye.com/blog/158568
线程的同步
由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个严重的问题。Java语言提供了专门机制以解决这种冲突,有效避免了同一个数据对象被多个线程同时访问。
由于我们可以通过
private 关键字来保证数据对象只能被方法访问,所以我们只需针对方法提出一套机制,这套机制就是 synchronized
关键字,它包括两种用法:synchronized 方法和 synchronized 块。
1.
synchronized 方法:通过在方法声明中加入 synchronized关键字来声明 synchronized
方法。如:
- Class I_am_immutable
- {
- private final int MAX_VALUE = 10;
- priate final int blank_final;
- public I_am_immutable( int_initial_value )
- {
- blank_final = initial_value;
- }
- }
一个由构造函数进行初始化的final型变量叫做blank
final。一般的,如果你频繁的只读访问一个对象,把它声明成一个不变对象是个保证同步的好办法,而且可以提高JVM的效率,因为HotSpot会把它放到堆栈里以供使用。
同步封装器(Synchronization
Wrappers)
同步还是不同步,是问题的所在。让我们跳出这样的思维模式吧,世事无绝对。有什么办法可以使你的类灵活的在同步与不同步之间切换呢?
有一个非常好的现成例子,就是新近引入JAVA的Collection框架,它是用来取代原本散乱的、繁重的Vector等类型。Vector的任何方法
备注:
1、休眠当前进程:
?
Thread.sleep( 1000 ) |
Rhythmk 一步一步学 JAVA (21) JAVA 多线程,布布扣,bubuko.com