线程:
并行:同一时间点发生
并发:同一时间段发生
进程:内存中运行的程序
线程:进程中的一个执行单元 一个进程至少需要一个线程
java操作进程:
创建进程:
两个方法: exec start方法
线程使用的两种方法:
实现Runnable和继承Thread
一般采用实现Runnable:优点:可以达到对同一资源块的访问 缺点:实现较为复杂
用sleep方法可以方便的是否多线程异常
package com.day06;
import java.util.ArrayList;
import java.util.Random;
import java.util.UUID;
import java.util.stream.IntStream;
/**
* 要求:100个人进场 A,B两个门,进场时领彩票.人进场完毕后返回每个门进入人的个数
*
* @author mason
*
*/
/**
* 1.每个人先选择门 编号1-100 2.每个人按照顺序排队 3.进场
*
*/
public class ThreadTestDemo {
public static int personNum = 100;// 100个人 编号0-99
public static void main(String[] args) {
// TODO Auto-generated method stub
// 创建100个人对象
ArrayList<Person> personList = new ArrayList();
int i = 0;
for (i = 0; i < 100; i++) {
Person person = new Person();
person.chooseDoor();// 选择门
person.setpNum("p" + i);
person.setDoornum(person.chooseDoor());
personList.add(person);
}
// 将同一门的人排列在一个集合中
InPlace.aList = new ArrayList(60);
InPlace.bList = new ArrayList(60);
for (int j = 0; j < personList.size(); j++) {
// 选择的A门
if (personList.get(j).getDoornum().equals(String.valueOf(Door.doorA.getDoornum()))) {
System.out.println("a在加人");
InPlace.aList.add(personList.get(j));
} else {
System.out.println("b在加人");
InPlace.bList.add(personList.get(j));
}
}
// 多线程开始
// A , B门的人同时进入
InPlace inPlace = new InPlace();
new Thread(inPlace, "A门").start();
;
new Thread(inPlace, "B门").start();
;
}
}
// 进入场地
class InPlace implements Runnable {
public static String pNum;
public static Integer aNum;// A门总人数
public static Integer bNum;// B门总人数
public static ArrayList<Person> aList;
public static ArrayList<Person> bList;
@Override
// 进入方法
public void run() {
// TODO Auto-generated method stub
if (Thread.currentThread().getName().equals("A门")) {
for (int i = 0; i < aList.size(); i++) {
String lottery = UUID.randomUUID().toString();// 产生随机数
aList.get(i).setLottery(lottery);// 彩票
System.out.println("编号:" + aList.get(i).getpNum() + "的人,正在从" + Thread.currentThread().getName()
+ "进入,彩票:" + lottery);
if (i == aList.size() - 1) {
System.out.println("a門總共" + aList.size() + "人");
}
}
} else {
for (int i = 0; i < bList.size(); i++) {
String lottery = UUID.randomUUID().toString();// 产生随机数
System.out.println("编号:" + bList.get(i).getpNum() + "的人,正在从" + Thread.currentThread().getName()
+ "进入,彩票:" + lottery);
if (i == bList.size() - 1) {
System.out.println("b門總共" + bList.size() + "人");
}
}
}
}
}
class Person {
private String lottery = "";// 彩票编号,采用UUID模拟
private String pNum;// 编号p0-p99 不重复
private String doornum;
public String getDoornum() {
return doornum;
}
public void setDoornum(String doornum) {
this.doornum = doornum;
}
public String getLottery() {
return lottery;
}
public void setLottery(String lottery) {
this.lottery = lottery;
}
public String getpNum() {
return pNum;
}
public void setpNum(String pNum) {
this.pNum = pNum;
}
public String chooseDoor() {
Random random = new Random();
return doornum = String.valueOf(random.nextInt(2));// 产生0-1随机数
}
}
enum Door {
doorA("A门", 0), doorB("B门", 1);
int inNum = 0;
private String doorName;
private Integer doornum;
public int getInNum() {
return inNum;
}
public void setInNum(int inNum) {
this.inNum = inNum;
}
public String getDoorName() {
return doorName;
}
public void setDoorName(String doorName) {
this.doorName = doorName;
}
public Integer getDoornum() {
return doornum;
}
public void setDoornum(Integer doornum) {
this.doornum = doornum;
}
private Door(String doorName, Integer doornum) {
this.doorName = doorName;
this.doornum = doornum;
}
}
缺点:此过程并没有重现预期的线程之间扰乱的问题,原因在于在非线程部分已经避免了此类问题
编号:p3的人,正在从A门进入,彩票:5f6327de-9dd6-4a40-bba8-2b4e5a94c83c
编号:p4的人,正在从A门进入,彩票:b68f9d9c-eeff-4e84-8271-bb2e05916f11
编号:p0的人,正在从B门进入,彩票:0e3ef1a2-30af-4819-ab02-f2fb5907c0f8
编号:p6的人,正在从A门进入,彩票:a915cc1b-193b-44ef-98c3-6e65de29e013
编号:p1的人,正在从B门进入,彩票:2acd8843-5e96-422c-ae78-891aa8d4574e
编号:p7的人,正在从A门进入,彩票:83c83c15-a961-4e43-86ac-7bd1697293da
编号:p2的人,正在从B门进入,彩票:8f149363-7cde-41ee-bf9c-c03b9aa7eb23
编号:p8的人,正在从A门进入,彩票:78ed5a4c-dbc8-4b69-a5a1-236d60258fa2
编号:p5的人,正在从B门进入,彩票:288da31a-6782-48dd-bb63-797de36c0066
编号:p11的人,正在从A门进入,彩票:b803da3f-6748-4d98-9fcb-b3fa805c77f2
编号:p9的人,正在从B门进入,彩票:8766725f-b59d-4f3a-848f-d206e09a13a8
编号:p13的人,正在从A门进入,彩票:05553f83-0058-4707-8921-a978ae527046
编号:p10的人,正在从B门进入,彩票:5ff190b2-b7ba-433a-b05c-ca8f76471a0b
编号:p15的人,正在从A门进入,彩票:3e84896a-2654-4b13-bfb2-3d0c920eabf4
编号:p12的人,正在从B门进入,彩票:da9d2717-ff4a-442a-b7fb-1c21a41dcabf
编号:p19的人,正在从A门进入,彩票:ce54f838-06c3-4aba-8db7-88434ef5cfd2
编号:p14的人,正在从B门进入,彩票:275032b7-5e58-4d3b-adb7-f925267e56b2
编号:p22的人,正在从A门进入,彩票:f74750d7-c53a-43dd-b5d8-493e6f5f1ed5
编号:p16的人,正在从B门进入,彩票:ca6c4284-4ff4-43d0-8e1c-a6add8b0968f
编号:p23的人,正在从A门进入,彩票:684785f0-76f7-461e-80f9-dfa1403031f2
编号:p17的人,正在从B门进入,彩票:7541c37c-54e1-459e-9b36-08cb29b8219a
编号:p24的人,正在从A门进入,彩票:a9c40bf5-52f2-4a0a-873d-7134f2cf6007
编号:p18的人,正在从B门进入,彩票:7d7644da-130f-45cc-aa9d-674d5dd8a4e4
编号:p20的人,正在从B门进入,彩票:0bd1b2d7-2956-438a-bec9-be11195df019
编号:p21的人,正在从B门进入,彩票:a06a748f-8e83-4c19-9413-b525c6ac981d
编号:p27的人,正在从A门进入,彩票:07b54cae-f6f2-4923-ac1d-54fb57d3eebe
编号:p25的人,正在从B门进入,彩票:1f315ed1-5ec2-41ef-b476-76aaa2ce9a38
编号:p28的人,正在从A门进入,彩票:689fcae6-dc57-4990-a9f9-0c78deb7ae69
编号:p26的人,正在从B门进入,彩票:1c18a0ff-1fd0-4295-8d77-2ac249a1d46f
编号:p29的人,正在从A门进入,彩票:84ce228b-ef18-499f-ab18-de750332f6ef
编号:p33的人,正在从B门进入,彩票:ae5ee094-fbce-49ee-8e9b-ca166ffa87fc
编号:p30的人,正在从A门进入,彩票:2d8bbe74-58cf-4367-82a3-47a1fc9019a5
编号:p34的人,正在从B门进入,彩票:4d06947c-eeb5-44ca-abf4-33dc8e8c97e3
编号:p31的人,正在从A门进入,彩票:87995004-d9ef-4d94-bc2a-e0ea1a68a0c5
编号:p35的人,正在从B门进入,彩票:191b2b1d-d815-49eb-a50b-301c79d8f6eb
编号:p32的人,正在从A门进入,彩票:29a422ff-4338-44d8-a18d-f7e573eb2ee2
编号:p36的人,正在从A门进入,彩票:28810722-3780-40cc-bfc6-93d40e8d274d
编号:p37的人,正在从B门进入,彩票:716f1d3e-13db-4c48-93e9-6bae63dcca07
编号:p39的人,正在从A门进入,彩票:278089be-f6ad-4d1f-811c-3fc89c1cfe9d
编号:p38的人,正在从B门进入,彩票:3e84e9f8-d072-40ec-8c8c-e122db2fa23d
编号:p41的人,正在从A门进入,彩票:f54780fc-0664-4c26-b14a-83f6d1fcdac7
编号:p40的人,正在从B门进入,彩票:c2d839ce-7f0e-42d0-b528-b8f94210bf2c
编号:p42的人,正在从A门进入,彩票:811fa88f-2913-4a85-bf57-130be842bb8b
编号:p46的人,正在从B门进入,彩票:8b83570a-279c-47c1-8467-94eb33f49567
编号:p43的人,正在从A门进入,彩票:9b70c138-c9ba-41ab-991c-d14b2c22fd12
编号:p47的人,正在从B门进入,彩票:17c74f0f-a453-44b8-899a-a8fa5d328e8a
编号:p44的人,正在从A门进入,彩票:c48e525c-49a6-4eaa-a96b-d10601826fcc
编号:p48的人,正在从B门进入,彩票:600b87a7-dffe-437d-8fcf-8373939d1efa
编号:p45的人,正在从A门进入,彩票:3ee9b3c9-d7fd-4ec9-a910-b1ea8b552b9d
编号:p49的人,正在从B门进入,彩票:dcfc2de8-9480-4e4c-aaa3-cad2425331ce
编号:p53的人,正在从A门进入,彩票:d0cfefb5-2f11-4635-97b0-d14cdb0aca1b
编号:p50的人,正在从B门进入,彩票:cc08bd4a-651d-41bc-84ba-72cb5d1945c9
编号:p57的人,正在从A门进入,彩票:716f71f9-ce1b-4cc4-9a9a-9bab7ac2e71e
编号:p51的人,正在从B门进入,彩票:709f1d61-f837-425e-a86d-4ff2ab2b06fc
编号:p59的人,正在从A门进入,彩票:1449b674-bc14-4cf3-b965-388c9409824d
编号:p52的人,正在从B门进入,彩票:b4a0b42d-d321-4758-95c7-91af9bb1b922
编号:p62的人,正在从A门进入,彩票:dfba9df8-42c3-4503-adfc-244cbf60d0b8
编号:p54的人,正在从B门进入,彩票:17613db6-e040-448b-b184-a21802ec0de6
编号:p63的人,正在从A门进入,彩票:86787888-b9e3-4f66-bf90-64e21f25871e
编号:p55的人,正在从B门进入,彩票:626dae75-101a-4482-a567-f4005765b218
编号:p65的人,正在从A门进入,彩票:ba3685ab-1ff1-496a-a5d2-4e56c845a11c
编号:p56的人,正在从B门进入,彩票:6411893d-6698-4b42-8017-55d9f0fe866b
编号:p67的人,正在从A门进入,彩票:28afb37d-b999-481b-8d17-eb2030e679e1
编号:p58的人,正在从B门进入,彩票:80f41566-9e12-492b-a43e-9ace57bb72b7
编号:p69的人,正在从A门进入,彩票:6d086215-6ac3-4ac0-b592-423f73a3cf0b
编号:p60的人,正在从B门进入,彩票:e35ed81b-cbf8-4c6b-a9c2-580126a5ffba
编号:p70的人,正在从A门进入,彩票:8b2a6448-f374-42fa-a9a8-f770ba2e41f9
编号:p74的人,正在从A门进入,彩票:1d65be9e-73a9-4cf1-91f0-0a43ec7d4389
编号:p75的人,正在从A门进入,彩票:7f3acd79-f171-4d9f-97da-b8aa613135db
编号:p77的人,正在从A门进入,彩票:82151c1f-aeea-47c6-ad43-3056faf63dc6
编号:p78的人,正在从A门进入,彩票:75a314df-963a-4fb0-8f23-55ee70b69a23
编号:p79的人,正在从A门进入,彩票:d45346b4-a361-4b2e-9617-2c4900ccec1b
编号:p81的人,正在从A门进入,彩票:4054c17c-3075-4811-ab6a-3b74e23d9244
编号:p85的人,正在从A门进入,彩票:7c6378b2-49f8-4d53-be4d-232da2016800
编号:p61的人,正在从B门进入,彩票:ee2c43ab-c803-4a6b-b8f0-a038b98b4ef0
编号:p64的人,正在从B门进入,彩票:cbec6d37-1c64-4c1d-ad98-8e72125f03de
编号:p86的人,正在从A门进入,彩票:128fc4b7-502c-4ece-885f-896c72c24687
编号:p66的人,正在从B门进入,彩票:a18e3e8f-5a29-41d2-a5ee-7037a7e0f83a
编号:p87的人,正在从A门进入,彩票:b2ba3da0-bc8c-4284-b7eb-213865f322e7
编号:p68的人,正在从B门进入,彩票:ea0b21e2-42cf-430e-9ab8-e12c246e7ebe
编号:p90的人,正在从A门进入,彩票:d35ec21a-702c-4680-a94e-f3cd349b7795
编号:p71的人,正在从B门进入,彩票:652641ba-c65a-439c-a149-fa7e207e8d29
编号:p92的人,正在从A门进入,彩票:9548f21a-8e39-46e8-a5ae-b5d54c8c99f1
编号:p72的人,正在从B门进入,彩票:3cc043ea-87d6-4ef5-96b2-c0d479908cae
编号:p98的人,正在从A门进入,彩票:a48875a3-b44e-489c-b3e3-953109d396f0
a門總共46人
编号:p73的人,正在从B门进入,彩票:a4c0281a-7dfa-4018-bb3a-35c535a952e6
编号:p76的人,正在从B门进入,彩票:ae45640c-4729-4a45-aff7-be59230d11dc
编号:p80的人,正在从B门进入,彩票:c38244e5-0c3d-404b-a1a2-0f5b6517aebd
编号:p82的人,正在从B门进入,彩票:8751a7bf-3061-48fe-b7d2-8b93e4fcc958
编号:p83的人,正在从B门进入,彩票:8e7a3783-b20d-4ac5-8e55-e7ecefaff9d5
编号:p84的人,正在从B门进入,彩票:41b91702-a943-4b21-aa88-0d0ae2367aea
编号:p88的人,正在从B门进入,彩票:b8f62ac4-3b94-4c6d-8a6a-2697e4bdb77d
编号:p89的人,正在从B门进入,彩票:34d35b9c-0d4f-4dc0-ae27-97c025f57924
编号:p91的人,正在从B门进入,彩票:c4ee00ca-6fb3-487c-a8d6-6cb87055a6be
编号:p93的人,正在从B门进入,彩票:96f41751-10a6-472d-b912-15ee5c1f9199
编号:p94的人,正在从B门进入,彩票:1bfeeb3a-dda8-404a-af29-edefcb02d8f6
编号:p95的人,正在从B门进入,彩票:486349f7-0092-4df0-a2a7-cbe8b63eb053
编号:p96的人,正在从B门进入,彩票:cec68b92-81da-42cb-a903-827741abdbb6
编号:p97的人,正在从B门进入,彩票:8cea34cf-501a-4f83-a799-0d1f861855cb
编号:p99的人,正在从B门进入,彩票:7f505edd-82a7-4b32-939d-98f2e48c1e22
b門總共54人