利用Java实现多线程模拟生产者消费者问题

利用Java多线程模拟实现生产者消费者问题


  • 利用Java提供的Thread类,创建继承于Thread的类。重写run()方法。
  • 注意main()方法中new的hellowolrd实例需要与这里的类名helloworld同名。
  • 此问题设置生产者为三个User线程,模拟不断登录系统,最多登录200次后结束登录。
    设置一个备份线程,作为消费者,备份每个用户登录的过程。
  • 因为要统计登陆的次数,设置了一个count和一个mutex变量,这个count因为需要三个线程使用,所以他需要mutex来控制同步,每次只能有一个线程操作count。
  • 其中设置缓冲区为最大5个
  • 全部备份完毕暂停备份

具体代码如下:

public class helloworld {	
private final String LOCK="lock";
private final int max=10;
int full=0;
    int mutex=0;
    int count=0;
    int copycount=1;
class User extends Thread
{
		int i;
		User(int i)
		{
			this.i=i;
		}
	@Override
	public void run()
	 {
		user();
	 }
	public void user() 
		{
		while(true) 
		{
		 synchronized(LOCK)
		 {
			try {	
				if(mutex==1)
				LOCK.wait();
				if(count==200)
					break;
				mutex++;
				count++;
				mutex--;
				LOCK.notify();
				}
			catch(Exception e)
				{
						e.printStackTrace();
				}
		
			while(full==max)
			
			{
				try 
				{
				LOCK.wait();
				}
				catch(Exception e)
				{
					e.printStackTrace();
				}
			}
			try {
		    Thread.sleep(100);
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
			System.out.println("用户"+i+"登录"+count);
			full++;
			LOCK.notify();
		}
	    }
		}
}
	class Copy extends Thread
	{
		@Override
		public void run()
		{
		      copy();	
		}
		
		public void	copy()
		{
			while(true) {
				if(copycount==201)
				{
					break;
				}
		synchronized(LOCK) {
			while(full==0)
			{
				try
				{
					LOCK.wait();
				}
				catch(Exception e)
				{
					e.printStackTrace();
				}
			}
			System.out.println("已备份"+copycount);
			full--;
			copycount++;
			LOCK.notify();
		}
		}
		}
	}

	public static void main(String arg[])
	{
		helloworld helloworld=new helloworld();
	    User u1=helloworld.new User(1);
	    User u2=helloworld.new User(2);
	    User u3=helloworld.new User(3);
	    User u4=helloworld.new User(4);
	    Copy c=helloworld.new Copy();
		u1.start();
		u2.start();
		u3.start();
		u4.start();
		c.start();
	}
}

输出结果如下:

用户1登录1
用户1登录2
用户1登录3
用户1登录4
用户1登录5
用户1登录6
用户1登录7
用户1登录8
用户1登录9
用户1登录10
已备份1
已备份2
用户4登录12
用户4登录13
已备份3
已备份4
已备份5
已备份6
已备份7
已备份8
已备份9
已备份10
已备份11
已备份12
用户1登录16
用户1登录17
用户1登录18
用户1登录19
用户1登录20
用户1登录21
用户1登录22
用户1登录23
用户1登录24
用户1登录25
已备份13
已备份14
已备份15
已备份16
已备份17
已备份18
已备份19
已备份20
已备份21
已备份22
用户1登录26
用户1登录27
用户1登录28
用户1登录29
用户1登录30
用户1登录31
用户1登录32
用户1登录33
用户1登录34
用户1登录35
已备份23
已备份24
已备份25
用户1登录36
用户1登录37
用户1登录38
已备份26
已备份27
已备份28
已备份29
已备份30
已备份31
已备份32
已备份33
已备份34
已备份35
用户4登录39
用户4登录40
用户4登录41
用户4登录42
用户4登录43
用户4登录44
用户4登录45
用户4登录46
用户4登录47
用户4登录48
已备份36
已备份37
已备份38
已备份39
已备份40
已备份41
已备份42
已备份43
已备份44
已备份45
用户1登录49
用户1登录50
用户1登录51
用户1登录52
用户1登录53
用户1登录54
用户1登录55
用户1登录56
用户1登录57
用户1登录58
已备份46
已备份47
已备份48
已备份49
已备份50
已备份51
已备份52
已备份53
已备份54
已备份55
用户1登录59
用户1登录60
用户1登录61
用户1登录62
用户1登录63
用户1登录64
用户1登录65
用户1登录66
用户1登录67
用户1登录68
已备份56
已备份57
已备份58
已备份59
已备份60
已备份61
已备份62
已备份63
已备份64
已备份65
用户1登录69
用户1登录70
用户1登录71
用户1登录72
用户1登录73
用户1登录74
用户1登录75
用户1登录76
用户1登录77
用户1登录78
已备份66
已备份67
已备份68
已备份69
已备份70
已备份71
已备份72
已备份73
已备份74
已备份75
用户1登录79
用户1登录80
用户1登录81
用户1登录82
用户1登录83
用户1登录84
用户1登录85
用户1登录86
用户1登录87
用户1登录88
已备份76
已备份77
已备份78
已备份79
已备份80
已备份81
已备份82
已备份83
已备份84
已备份85
用户1登录89
用户1登录90
用户1登录91
用户1登录92
用户1登录93
用户1登录94
用户1登录95
用户1登录96
用户1登录97
用户1登录98
已备份86
已备份87
已备份88
已备份89
已备份90
已备份91
已备份92
已备份93
已备份94
已备份95
用户1登录99
用户1登录100
用户1登录101
用户1登录102
用户1登录103
用户1登录104
用户1登录105
用户1登录106
用户1登录107
用户1登录108
已备份96
已备份97
已备份98
已备份99
已备份100
已备份101
已备份102
已备份103
已备份104
已备份105
用户1登录109
用户1登录110
用户1登录111
用户1登录112
用户1登录113
用户1登录114
用户1登录115
用户1登录116
用户1登录117
用户1登录118
已备份106
已备份107
已备份108
已备份109
已备份110
已备份111
已备份112
已备份113
已备份114
已备份115
用户1登录119
用户1登录120
用户1登录121
用户1登录122
用户1登录123
用户1登录124
用户1登录125
用户1登录126
用户1登录127
用户1登录128
已备份116
已备份117
已备份118
已备份119
已备份120
已备份121
已备份122
已备份123
已备份124
已备份125
用户1登录129
用户1登录130
用户1登录131
用户1登录132
用户1登录133
用户1登录134
用户1登录135
用户1登录136
用户1登录137
用户1登录138
已备份126
已备份127
已备份128
已备份129
已备份130
已备份131
已备份132
已备份133
已备份134
已备份135
用户1登录139
用户1登录140
用户1登录141
用户1登录142
用户1登录143
用户1登录144
用户1登录145
用户1登录146
用户1登录147
用户1登录148
已备份136
已备份137
已备份138
已备份139
已备份140
已备份141
已备份142
已备份143
已备份144
已备份145
用户1登录149
用户1登录150
用户1登录151
用户1登录152
用户1登录153
用户1登录154
用户1登录155
用户1登录156
用户1登录157
用户1登录158
已备份146
已备份147
已备份148
已备份149
已备份150
已备份151
已备份152
已备份153
已备份154
已备份155
用户1登录159
用户1登录160
用户1登录161
用户1登录162
用户1登录163
用户1登录164
用户1登录165
用户1登录166
用户1登录167
用户1登录168
已备份156
已备份157
已备份158
已备份159
已备份160
已备份161
已备份162
已备份163
已备份164
已备份165
用户1登录169
用户1登录170
用户1登录171
用户1登录172
用户1登录173
用户1登录174
用户1登录175
用户1登录176
用户1登录177
用户1登录178
已备份166
已备份167
已备份168
已备份169
已备份170
已备份171
已备份172
已备份173
已备份174
已备份175
用户1登录179
用户1登录180
用户1登录181
用户1登录182
用户1登录183
用户1登录184
用户1登录185
用户1登录186
用户1登录187
用户1登录188
已备份176
已备份177
已备份178
已备份179
已备份180
用户1登录189
用户1登录190
用户1登录191
用户1登录192
用户1登录193
已备份181
已备份182
已备份183
已备份184
已备份185
已备份186
已备份187
已备份188
已备份189
已备份190
用户2登录194
用户2登录195
用户2登录196
用户2登录197
用户2登录198
用户2登录199
用户2登录200
用户3登录200
用户4登录200
已备份191
已备份192
已备份193
已备份194
用户1登录200
已备份195
已备份196
已备份197
已备份198
已备份199
已备份200

猜你喜欢

转载自www.cnblogs.com/Trumpetertimes/p/12572291.html
今日推荐