java基础8 线程详解

线程:
并行:同一时间点发生
并发:同一时间段发生
进程:内存中运行的程序
线程:进程中的一个执行单元 一个进程至少需要一个线程
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人

阅读更多

更多精彩内容