import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.select.Elements; class Mutex{ private int order=1; //记录线程顺序号 private int maxNum=0; //最大线程数 Mutex(int num){ this.maxNum=num; } //循环设置下一次要打印的顺序号 public void setOrder(){ this.order=(++order)<=maxNum?order:1; } //得到顺序号 public int getOrder(){ return this.order; } } //打印工作 class PrintRunnable implements Runnable{ public static byte[] readInputStream(InputStream inputStream) throws IOException { byte[] buffer = new byte[1024]; int len = 0; ByteArrayOutputStream bos = new ByteArrayOutputStream(); while((len = inputStream.read(buffer)) != -1) { bos.write(buffer, 0, len); } bos.close(); return bos.toByteArray(); } private Object[] cont=null; //打印内容 private int order=-1; //当前线程的打印顺序 private Mutex mutex=null; //临界区对象 PrintRunnable(Object[] c,int o,Mutex m){ this.cont=c; this.order=o; this.mutex=m; } public void run(){ try{ //循环打印内容 for(Object c:cont){ //互斥操作临界区 synchronized(mutex){ //如果当前工作线程的顺序号不等于临界区的顺序号,则工作线程等待阻塞,并放弃锁 while(mutex.getOrder()!=this.order) mutex.wait(); //打印内容 try{ String head1 = "User-Agent"; String head2 = "Mozilla/6.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20150312 Firefox/4.3.1"; Document doc = Jsoup.connect("http://www.tvmao.com/query.jsp?keys=" + c + "&ed=").header(head1, head2) .timeout(10000000).get(); Elements links = doc.select("dd[class=cur] a"); String title = links.text(); System.out.println(c+":"+title); }catch(Exception e){ } //设置下一次允许打印的线程顺序 mutex.setOrder(); //唤醒在临界区等待的所有线程 mutex.notifyAll(); } } }catch(InterruptedException e){ e.printStackTrace(); } } } //测试 public class Mutx{ public static void main(String[] args){ String s = "FIFA女足世界杯|Fishing全攻略|GO时尚|HELLO中国|HELLO天津|KAKU幼儿园|KO雷霆一击|K歌情人|Lily寻医|Mr.曹的店|N汽车我的最爱鸭宝宝|SHILLS红魔纤惹火紧实组|TECWOO天沃绿色高频灶超值组|TICO欢乐假日|TV1周刊|U20世界杯|FIFA女足世界杯|Fishing全攻略|GO时尚|HELLO中国|HELLO天津|KAKU幼儿园|KO雷霆一击|K歌情人|Lily寻医|Mr.曹的店|N汽车我的最爱鸭宝宝|SHILLS红魔纤惹火紧实组|TECWOO天沃绿色高频灶超值组|TICO欢乐假日|TV1周刊|U20世界杯|X战警|X档案|X诊所|e视界|“博科圣地”与西非反恐|“高考,加油!”|一个和八个|一个强盗都不留|一个老爸四个娃之永不放弃|一人一世界|一仆二主|一代宗师|一代帝师八思巴|一千零一夜|一可的魔兽教室|一周之间|一声所爱|一夜大肚|一夜迷情|一家人|一念七宝锦上添花猛犸牙吊坠|一战启示录|一方水土|一日一字|一枝小雨伞|一槌定音|一次别离|一点不夸张|一生只爱你|一票难求|一站到底|一线|一线缉毒|一脱而现|一起去旅行|一起变美吧|一起用餐吧"; String s2 = "一个和八个|一个强盗都不留|一个老爸四个娃之永不放弃|一人一世界|一仆二主|一代宗师|一代帝师八思巴|一千零一夜|一可的魔兽教室|一周之间|一声所爱|一夜大肚|一夜迷情|一家人|一念七宝锦上添花猛犸牙吊坠|一战启示录|一方水土|FIFA女足世界杯|Fishing全攻略|GO时尚|HELLO中国|HELLO天津|KAKU幼儿园|KO雷霆一击|K歌情人|Lily寻医|Mr.曹的店|N汽车我的最爱鸭宝宝|SHILLS红魔纤惹火紧实组|TECWOO天沃绿色高频灶超值组|TICO欢乐假日|TV1周刊|U20世界杯|X战警|X档案|X诊所|e视界|“博科圣地”与西非反恐|“高考,加油!”|一个和八个|一个强盗都不留|一个老爸四个娃之永不放弃|一人一世界|一仆二主|一代宗师|一代帝师八思巴|一千零一夜|一可的魔兽教室|一周之间|一声所爱|一夜大肚|一夜迷情|一家人|一念七宝锦上添花猛犸牙吊坠|一战启示录|一方水土|一日一字|一枝小雨伞|一槌定音|一次别离|一点不夸张|一生只爱你|一票难求|一站到底|一线|一线缉毒|一脱而现|一起去旅行|一起变美吧|一起用餐吧"; String s3 = "一日一字|一枝小雨伞|一槌定音|一次别离|一点不夸张|一生只爱你|一票难求|一站到底|一线|一线缉毒|一脱而现|一起去旅行|一起变美吧|一起用餐吧|X战警|X档案|X诊所|e视界|“博科圣地”与西非反恐|“高考,加油!”|FIFA女足世界杯|Fishing全攻略|GO时尚|HELLO中国|HELLO天津|KAKU幼儿园|KO雷霆一击|K歌情人|Lily寻医|Mr.曹的店|N汽车我的最爱鸭宝宝|SHILLS红魔纤惹火紧实组|TECWOO天沃绿色高频灶超值组|TICO欢乐假日|TV1周刊|U20世界杯|X战警|X档案|X诊所|e视界|“博科圣地”与西非反恐|“高考,加油!”|一个和八个|一个强盗都不留|一个老爸四个娃之永不放弃|一人一世界|一仆二主|一代宗师|一代帝师八思巴|一千零一夜|一可的魔兽教室|一周之间|一声所爱|一夜大肚|一夜迷情|一家人|一念七宝锦上添花猛犸牙吊坠|一战启示录|一方水土|一日一字|一枝小雨伞|一槌定音|一次别离|一点不夸张|一生只爱你|一票难求|一站到底|一线|一线缉毒|一脱而现|一起去旅行|一起变美吧|一起用餐吧"; String[] names1 = s.split("\\|"); String[] names2 = s2.split("\\|"); String[] names3 = s3.split("\\|"); Mutex mutex=new Mutex(3); new Thread(new PrintRunnable(names1,1,mutex)).start(); new Thread(new PrintRunnable(names2,2,mutex)).start(); new Thread(new PrintRunnable(names3,3,mutex)).start(); } }
最近下载更多
212600 LV7
2022年9月6日
刘卫国 LV6
2021年12月1日
Sean_admin LV7
2021年4月23日
liangge2115 LV27
2020年10月24日
senint LV6
2020年5月14日
wei112233 LV15
2020年2月2日
zdjljty LV9
2019年12月13日
1602177575 LV14
2019年11月25日
newhaijun LV15
2019年11月14日
付晨雨 LV6
2019年9月10日