# 锁类Lock #
对比:
**1)synchronized (类,当做锁,多个线程要是同一个类)
{同步代码;}**
例子:
package Lock;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class LockTest {
public static void main(String[] args) {
output out = new output();
开启两个线程,输出一个字符串,一个字符一个字符输出
new Thread(new Runnable() {
public void run() {
out.show("abcdef");
}
}).start();
new Thread(new Runnable() {
public void run() {
out.show("123456");
}
}).start();
}
}
class output {
public void show(String str) {
char[] x = str.toCharArray();
while (true) {
synchronized (output.class) {
//同步代码
for (int i = 0; i < x.length; i++) {
System.out.print(x[i]);
}
System.out.println();
//
}
}
}
}
2)try {同步代码块} finally {lock.unlock();}
为什么用try:因为如果在代码里报错的话,这个锁的钥匙就永远被带走了,这个段代码也永远锁死了,所以用finally
package Lock;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class LockTest {
public static void main(String[] args) {
output out = new output();
new Thread(new Runnable() {
public void run() {
out.show("abcdef");
}
}).start();
new Thread(new Runnable() {
public void run() {
out.show("123456");
}
}).start();
}
}
class output {
Lock lock = new ReentrantLock();
public void show(String str) {
char[] x = str.toCharArray();
while (true) {
//同步代码块
lock.lock();
try {
for (int i = 0; i < x.length; i++) {
System.out.print(x[i]);
}
System.out.println();
} finally {
lock.unlock();
}
//
}
}
}