package com.home;
public class SynchronizedTest implements Runnable {
public synchronized void method1() {
System.out.println("method1获得锁,正常运行!");
method2();
}
public synchronized void method2() {
System.out.println("method2获得锁,也正常运行!");
}
@Override
public void run() {
method1();
}
public static void main(String[] args) {
SynchronizedTest st = new SynchronizedTest();
new Thread(st).start();
new Thread(st).start();
}
}
package com.home;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class LockTest implements Runnable {
Lock lock = new ReentrantLock();
public void method1() {
lock.lock();
System.out.println("method1获得锁,正常运行!");
method2();
lock.unlock();
}
public void method2() {
lock.lock();
System.out.println("method2获得锁,也正常运行!");
lock.unlock();
}
@Override
public void run() {
method1();
}
public static void main(String[] args) {
LockTest lt = new LockTest();
new Thread(lt).start();
new Thread(lt).start();
}
}
method1获得锁,正常运行! method2获得锁,也正常运行! method1获得锁,正常运行! method2获得锁,也正常运行!
package com.home;
import java.util.Random;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
class ReadWrte {
// 共享数据,可以多个线程读数据,只能有一个线程写数据
private int data;
// 创建读写锁
ReadWriteLock rwLock = new ReentrantReadWriteLock();
/**
* 读数据,上读锁
*/
public void get() {
// 读锁
rwLock.readLock().lock();
try {
System.out.println(Thread.currentThread().getName() + ",Read!");
Thread.sleep((long) Math.random() * 1000);
System.out.println(Thread.currentThread().getName() + " 读出的数据为:" +
this.getData());
} catch (Exception e) {
e.printStackTrace();
} finally {
rwLock.readLock().unlock();
}
}
/**
* 写数据,上写锁
*
* @param data
*/
public void put(int data) {
// 写锁
rwLock.writeLock().lock();
try {
System.out.println(Thread.currentThread().getName() + ",Write!");
Thread.sleep((long) Math.random() * 1000);
this.setData(data);
System.out.println(Thread.currentThread().getName() + " 写入的数据为:" +
this.getData());
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
rwLock.writeLock().unlock();
}
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
}
/**
* 测试类
*
* @author itmyhome
*
*/
public class ReadWriteLockTest {
/**
* @param args
*/
public static void main(String[] args) {
// 创建ReadWrte对象
final ReadWrte rw = new ReadWrte();
for (int i = 0; i < 10; i++) {
// 创建并启动10个读线程
new Thread(new Runnable() {
@Override
public void run() {
rw.get();
}
}).start();
// 创建并启动10个写线程
new Thread(new Runnable() {
@Override
public void run() {
// 写入一个随机数
rw.put(new Random().nextInt(8));
}
}).start();
}
}
}
Thread-0,Read! Thread-4,Read! Thread-8,Read! Thread-12,Read! Thread-0 读出的数据为:0 Thread-4 读出的数据为:0 Thread-8 读出的数据为:0 Thread-12 读出的数据为:0 Thread-19,Write! Thread-19 写入的数据为:5 Thread-7,Write! Thread-7 写入的数据为:7 Thread-3,Write! Thread-3 写入的数据为:4 Thread-16,Read! Thread-16 读出的数据为:4 Thread-11,Write! Thread-11 写入的数据为:0 Thread-15,Write! Thread-15 写入的数据为:5 Thread-2,Read! Thread-2 读出的数据为:5 Thread-17,Write! Thread-17 写入的数据为:2 Thread-6,Read! Thread-6 读出的数据为:2 Thread-1,Write! Thread-1 写入的数据为:5 Thread-13,Write! Thread-13 写入的数据为:4 Thread-9,Write! Thread-9 写入的数据为:7 Thread-5,Write! Thread-5 写入的数据为:2 Thread-10,Read! Thread-10 读出的数据为:2 Thread-18,Read! Thread-14,Read! Thread-18 读出的数据为:2 Thread-14 读出的数据为:2
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有