当前位置:网站首页>线程同步方法
线程同步方法
2022-08-06 05:24:00 【半世晨晓1128】
1.继承Thread,同步锁
package java11.同步.Thread;
public class Ticket extends Thread {
static int ticket = 100;
static Object o = new Object();
@Override
public void run() {
while (true) {
//同步锁
synchronized (o) {
if (ticket > 0) {
System.out.println(Thread.currentThread().getName() + ticket);
ticket--;
} else {
break;
}
}
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
package java11.同步.Thread;
public class Test01 {
public static void main(String[] args) {
Ticket t = new Ticket();
Ticket t1 = new Ticket();
Ticket t2 = new Ticket();
t.setName("晓晓");
t1.setName("小小");
t2.setName("晓");
t.start();
t1.start();
t2.start();
}
}
2.实现Runnable,同步锁
package java11.同步.Runnable;
public class Ticket implements Runnable {
int ticket = 100;
@Override
public void run() {
while (true) {
//同步锁
synchronized (this) {
if (ticket > 0) {
System.out.println(Thread.currentThread().getName() + ticket);
ticket--;
} else {
break;
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
package java11.同步.Runnable;
public class Test01 {
public static void main(String[] args) {
Ticket ticket = new Ticket();
Thread t = new Thread(ticket);
Thread t1 = new Thread(ticket);
Thread t2 = new Thread(ticket);
t.setName("晓晓");
t1.setName("小小");
t2.setName("晓");
t.start();
t1.start();
t2.start();
}
}
3.实现Runnable的同步方法
package java11.同步.同步方法;
public class Ticket implements Runnable {
int ticket = 100;
@Override
public void run() {
while (true) {
if (ticket > 0) {
sell();
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//同步方法
public synchronized void sell() {
if (ticket > 0) {
System.out.println(Thread.currentThread().getName() + ticket);
ticket--;
}
}
}
package java11.同步.同步方法;
public class Test01 {
public static void main(String[] args) {
Ticket ticket = new Ticket();
Thread t = new Thread(ticket);
Thread t1 = new Thread(ticket);
Thread t2 = new Thread(ticket);
t.setName("晓晓");
t1.setName("小小");
t2.setName("晓");
t.start();
t1.start();
t2.start();
}
}
4.实现Runnable,Collections.synchronizedList
package java11.同步.练习;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class MyThread implements Runnable {
List l = Collections.synchronizedList(new ArrayList());
@Override
public void run() {
for (int i = 0; i < 100; i++) {
l.add(i);
}
}
}
package java11.同步.练习;
public class Test01 {
public static void main(String[] args) throws InterruptedException {
MyThread m = new MyThread();
Thread t = new Thread(m);
Thread t1 = new Thread(m);
t.start();
t1.start();
t.join();
t1.join();
System.out.println(m.l.size());
}
}
边栏推荐
猜你喜欢

性能测试分析与使用

4.5 远程入侵

screen 乱码问题

Raspberry Pi official system cancels the pi user, how to initialize the default user and connect SSH without a display?

Fortinet :《2021 年OT与网络安全现状报告》之「要点综述」

详解使用可道云Kodbox快速在云服务器上搭建云盘

Docker quickly installs & builds Redis environment

Haproxy集群负载均衡详解

Office2016登录的账户名和microsoft账户名不照应的解决方法

5.6 XSS跨站脚本攻击
随机推荐
动态规划之粉刷房子
桌面上随便创建一个word文档,打开它都是显示兼容模式的解决方法
Difference between ordinary factory class and abstract factory class
初识网络层
Linux-DB2报错:SQL10007N Message “-10003“ could not be retrieved. Reason code: “3“
LVS load balancing server construction
一群菜鸟们的“员工信息管理系统”(C语言课程设计)
真实力好口碑!Fortinet又双叒叕获评Gartner“客户之选”荣誉称号
勒索软件攻击防御的9件事
4.5 远程入侵
Office2016登录的账户名和microsoft账户名不照应的解决方法
教你怎样用三剑客玩转正则表达式
装机经验记:U盘启动之Uefi启动和Legacy启动区别
m3u8探索日记(一)合并加密的m3u8视频片段
AVL树及其相关操作
高危漏洞预警 | Atlassian Confluence OGNL注入命令执行漏洞复现与分析报告
线程的六种状态
Docker 快速安装&搭建 Redis 环境
3.1 shellcode 概述
动态规划之最小路径之和