????Java????????????????????????????Thread?????????Runnable?????????????????????????????????????????
????????????????????????????д??δ????????з?????????????????????·??????????????????????????????г???100??????????????????????????
??????????????????д???????
????Java????  Java???????????????????????????????????  Java???????????????????????????????????
????classThreadTestextendsThread{ privateintticket=100; publicvoidrun(){ while(true){ if(ticket>0){ System.out.println(Thread.currentThread().getName()+ "issalingticket"+ticket--); }else{ break; } } } }
????main??????:
????Java????  Java???????????????????????????????????  Java???????????????????????????????????
????publicclassThreadDome1{ publicstaticvoidmain(String[]args){ ThreadTestt=newThreadTest(); t.start(); t.start(); t.start(); t.start(); } }
?????????????У???????ThreadTest????????????????????run?????е???????????????????1??????????????????ó????????????????????????????????ThreadDemo1???main?????У?????????????????????????????Σ?????????????????????????????е???????????????????????????????У??????? ????????????????????????????????????????????start()???????????????????
??????????????ThreadDemo1????main?????д??????Thread????
????Java????  Java???????????????????????????????????  Java???????????????????????????????????
????publicclassThreadDemo1{ publicstaticvoidmain(String[]args){ newThreadTest().start(); newThreadTest().start(); newThreadTest().start(); newThreadTest().start(); } }
????Java????  Java???????????????????????????????????  Java???????????????????????????????????
????classThreadTestextendsThread{ privateintticket=100; publicvoidrun(){ while(true){ if(ticket>0){ System.out.println(Thread.currentThread().getName()+ "issalingticket"+ticket--); }else{ break; } } } }
???????′????????
???????????????????????????Σ??? ???????????????100????????????????100?????????????????????????????????????????????????????????????????????????????????????У?????????????ThreadTest???????????????????????????????100?????????????????????????????
??????????Щ????????????????????????????·?????????????????????????????????????????????????????????????????????????е???????????????????????y???д??????????
????Java????  Java???????????????????????????????????  Java???????????????????????????????????
????publicclassThreadDemo1{ publicstaticvoidmain(String[]args){ ThreadTestt=newThreadTest(); newThread(t).start(); newThread(t).start(); newThread(t).start(); newThread(t).start(); } }
????Java????  Java???????????????????????????????????  Java???????????????????????????????????
????classThreadTestimplementsRunnable{ privateinttickets=100; publicvoidrun(){ while(true){ if(tickets>0){ System.out.println(Thread.currentThread().getName()+ "issalingticket"+tickets--); } } } }
?????????????У?????????????? ????????????????ThreadTest?????е?run()??????????????????????е??????tickets?????????????????????????????????Windows??????????????±?????????????????????????????±????????
????????? ???Runnable??????????Thread???????????????????????
????(1)??????????????????????????????????????????CPU?????????????????????Ч?????????????????????????????
????(2)???????????Java????????????????????????????????????????????????????????????????????????????????У????????????????????????????????ü??Thread??????????????????????????Runnable?????????
????(3)???????????????????????????????????????????????????????????????д??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????δ????????????????????????Runnable????????????
???????е?????
????import java.util.Queue;
????import java.util.concurrent.ConcurrentLinkedQueue;
????import javax.annotation.PostConstruct;
????import javax.annotation.PreDestroy;
????import org.slf4j.Logger;
????import org.slf4j.LoggerFactory;
????import org.springframework.beans.factory.annotation.Autowired;
????import cn.ticai.elottery.module.sms.service.SmsSendRecordService;
????import cn.ticai.elottery.module.tools.worker.data.SendConditionData;
????public class SmsSendWorker {
????private Logger log = LoggerFactory.getLogger("JOB");
????@Autowired
????private SmsSendRecordService smsSendRecordService;
????private Object lock;
????private Thread daemonThread;
????private Queue<SendConditionData> queue;
????@PostConstruct
????public void init() {
????//????????
????//??????????????
????SendThreadWorker worker = new SendThreadWorker();
????//????????
????queue = new ConcurrentLinkedQueue<SendConditionData>();
????lock = new Object();
????//??????????????
????daemonThread = new Thread(worker);
????daemonThread.start();
????}
????@PreDestroy
????public void destroy() {
????daemonThread.interrupt();
????}
????public void excuteSendSMS(SendConditionData condition) {
????queue.add(condition);
????//??notify??wait???????????????
????synchronized(lock) {
????lock.notify();
????}
????}
????class SendThreadWorker implements Runnable {
????@Override
????public void run() {
????while (true) {