1、顺序控制
package com.my;
public class Demo {
//创建线程对象
private static Thread t1;
private static Thread t2;
private static Thread t3;
public static void main(String[] args)
{
//使用构造方法创建
t1 = new Thread(new Runnable() {
@Override
public void run()
{
System.out.println("t1");
}
});
t2 = new Thread(new Runnable() {
@Override
public void run()
{
try
{
//当t1执行完毕 才能执行t2
t1.join();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
System.out.println("t2");
}
});
t3 = new Thread(new Runnable() {
@Override
public void run()
{
try
{
//同理 在t2执行完毕 才执行t3
t2.join();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
System.out.println("t3");
}
});
//启动线程
t1.start();
t2.start();
t3.start();
}
}
结果:
t1
t2
t3
Process finished with exit code 0
2、互斥控制:
package com.my;
public class TicketOffice {
private int ticketNum = 0;
public TicketOffice(int ticketNum)
{
super();
this.ticketNum = ticketNum;
}
public int getTicketNum() {
return ticketNum;
}
public void setTicketNum(int ticketNum)
{
this.ticketNum = ticketNum;
}
public void sellOneTicket(){
ticketNum--;
if(ticketNum >= 0){
System.out.println("剩余: " + ticketNum);
}else{
System.out.println("失败!");
}
}
public static void main(String[] args) {
//初始化数为100
final TicketOffice ticketOffice = new TicketOffice(100);
for(int i=0;i<10;i++){
//利用for循环 每次循环创建新的线程 执行售票函数,让线程无序并发,实现互斥效果
new Thread(new Runnable(){
@Override
public void run() {
while(ticketOffice.getTicketNum() > 0){
ticketOffice.sellOneTicket();
} }
}).start(); }
}
}
结果:
剩余: 99
剩余: 98
剩余: 97
剩余: 96
剩余: 94
剩余: 95
剩余: 91
剩余: 92
剩余: 93
剩余: 87
剩余: 85
剩余: 88
剩余: 89
剩余: 81
剩余: 80
剩余: 79
剩余: 77
剩余: 76
剩余: 75
剩余: 90
剩余: 73
剩余: 74
剩余: 78
剩余: 82
剩余: 82
剩余: 66
剩余: 65
剩余: 64
剩余: 62
剩余: 84
剩余: 86
剩余: 60
剩余: 61
剩余: 57
剩余: 63
剩余: 67
剩余: 68
剩余: 68
剩余: 70
剩余: 71
剩余: 72
剩余: 50
剩余: 51
剩余: 52
剩余: 46
剩余: 45
剩余: 53
剩余: 54
剩余: 42
剩余: 41
剩余: 40
剩余: 39
剩余: 26
剩余: 25
剩余: 24
剩余: 23
剩余: 22
剩余: 11
剩余: 10
剩余: 9
剩余: 8
剩余: 7
剩余: 6
剩余: 5
剩余: 4
剩余: 3
剩余: 2
剩余: 1
剩余: 0
剩余: 28
剩余: 33
剩余: 36
剩余: 43
剩余: 44
剩余: 47
剩余: 48
剩余: 49
剩余: 19
Process finished with exit code 0
3、心得体会:
利用java的thread类创建多线程,通过其函数实现对应的顺序控制和并发控制
在顺序控制,通过join函数实现多个线程之间的先后顺序,保证了线程之间的调用结果,使程序结果出现可控的线程安排 避免了多线程之间调用的无序混乱。
而在并发控制下,对于thread创建的线程对象直接调用,不加以控制,则会出现线程的并发效果 ,由程序结果可看到,因为不加以控制导致程序并发无序,相应的结果也是忽高忽低。逻辑混乱。
在系统中,保证应用程序的有序执行是一个重要的环节,若是让程序不加以控制的一起执行,则会出现像互斥结果一样的无序混乱。使事务执行调用出现不稳定,不正确的结果。
网友评论