java看看我是怎么利用数组给Runnable线程传参数的1
2013-09-07 18:15
351 查看
我的文章只给有耐心的人看,所以先写代码
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
public class TestWait implements Runnable {
// 当前信号量
int nt = 0;
// 线程池
ExecutorService service = null;
// 全局信号量
Semaphore sp = null;
public ExecutorService getService() {
return service;
}
public void setService(ExecutorService service) {
this.service = service;
}
public Semaphore getSp() {
return sp;
}
public void setSp(Semaphore sp) {
this.sp = sp;
}
public int getNt() {
return nt;
}
public void setNt(int nt) {
this.nt = nt;
}
public static void main(String[] args) {
// 线程池
ExecutorService tservice = Executors.newCachedThreadPool();
// 设定多线程并发信号量
final Semaphore tsp = new Semaphore(10);
int cnt = 100;
for (int i = 1; i <= cnt; i++) {
System.out.println("add the No. [" + i + "] thread in thread serveice!");
//Test t = new Test();
TestWait t = new TestWait();
t.setNt(i);
t.setService(tservice);
t.setSp(tsp);
Thread td = new Thread(t);
tservice.execute(td);
}
tservice.shutdown();
}
public void run() {
try{
// 线程加数
sp.acquire();
}
catch(Exception e)
{
e.printStackTrace();
}
System.out.println("--------->thread No. [" + nt + "] start ! ***** 还有 " +sp.getQueueLength()+" 线程等待执行");
try {
Thread.sleep(2000);//9000); //1000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
try{
// 线程减数
sp.release();
}catch(Exception e)
{
e.printStackTrace();
}
}
}
问题来源于给Runnable 接口的线程传参数……
多个线程,传进去的参数全不一样……
比如进去的、出来的……
先看个(游戏)参与者类:
public class Playe2r {
public int id;
// String name;
int state; //1 可以对弈
public Playe2r( int i, int j) {
id=i;
//name=nam1e;
state=j;
// TODO Auto-generated constructor stub
}
void setId(int i1d ) { this.id= i1d;}
int getId() {return this.id;}
}
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class player1test1 {
public static void main(String[] args)
{
Playe1r p1[]=new Playe1r[1000];
for(int i=0;i<p1.length; ++i) {
p1[i]=new Playe1r(i,""+i+"",1);
// p1[i].setId(i);
p1[i].id=i;
p1[i].state=(int) (9*Math.random());
}
for(int i= (p1.length-1); i>0; --i) {
p1[i].getId();
System.out.print(p1[i].id);
System.out.print(":");
System.out.println(p1[i].state);
}
System.out.println();
//--
List lst1=new ArrayList();
for(int i1=0;i1<p1.length;++i1) {
if( (1<p1[i1].state )&&(4>p1[i1].state) ) {
lst1.add( new Playe2r(p1[i1].getId(), p1[i1].state) );
}//if(1==p1[i1].getId(i1
}//for(int i1
Iterator it = lst1.iterator();
while(it.hasNext()){
// String s = (String)it.next(). ;
Object obj=it.next();
Playe2r objj=(Playe2r) obj;
System.out.print(objj.getId() );
System.out.print(" ");
System.out.println(objj.state);
}
//==
//-某player1 发起邀请
for (int i1i=1;i1i<99;++i1i) {
int rami=lst1.size();
int no_i=(int) (rami*(Math.random()));
for (int j1=1;j1<rami;++j1) {
if (no_i!=j1) {
//把 (no_i, j1) 这两个参数 分别 传给 邀请的 TestWait 线程(编号为响应的 线程池中的线程……
}//if (no_i!=j1
}//for(int j1=1
}//for int i1i=1
//==
}//main
}//class player1test1
主要的程序就是以上的部分……
至于 利用 “数组”如何传 相应(编号)的参数进去,咱们下回再说(文章已经够长了……)
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
public class TestWait implements Runnable {
// 当前信号量
int nt = 0;
// 线程池
ExecutorService service = null;
// 全局信号量
Semaphore sp = null;
public ExecutorService getService() {
return service;
}
public void setService(ExecutorService service) {
this.service = service;
}
public Semaphore getSp() {
return sp;
}
public void setSp(Semaphore sp) {
this.sp = sp;
}
public int getNt() {
return nt;
}
public void setNt(int nt) {
this.nt = nt;
}
public static void main(String[] args) {
// 线程池
ExecutorService tservice = Executors.newCachedThreadPool();
// 设定多线程并发信号量
final Semaphore tsp = new Semaphore(10);
int cnt = 100;
for (int i = 1; i <= cnt; i++) {
System.out.println("add the No. [" + i + "] thread in thread serveice!");
//Test t = new Test();
TestWait t = new TestWait();
t.setNt(i);
t.setService(tservice);
t.setSp(tsp);
Thread td = new Thread(t);
tservice.execute(td);
}
tservice.shutdown();
}
public void run() {
try{
// 线程加数
sp.acquire();
}
catch(Exception e)
{
e.printStackTrace();
}
System.out.println("--------->thread No. [" + nt + "] start ! ***** 还有 " +sp.getQueueLength()+" 线程等待执行");
try {
Thread.sleep(2000);//9000); //1000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
try{
// 线程减数
sp.release();
}catch(Exception e)
{
e.printStackTrace();
}
}
}
问题来源于给Runnable 接口的线程传参数……
多个线程,传进去的参数全不一样……
比如进去的、出来的……
先看个(游戏)参与者类:
public class Playe2r {
public int id;
// String name;
int state; //1 可以对弈
public Playe2r( int i, int j) {
id=i;
//name=nam1e;
state=j;
// TODO Auto-generated constructor stub
}
void setId(int i1d ) { this.id= i1d;}
int getId() {return this.id;}
}
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class player1test1 {
public static void main(String[] args)
{
Playe1r p1[]=new Playe1r[1000];
for(int i=0;i<p1.length; ++i) {
p1[i]=new Playe1r(i,""+i+"",1);
// p1[i].setId(i);
p1[i].id=i;
p1[i].state=(int) (9*Math.random());
}
for(int i= (p1.length-1); i>0; --i) {
p1[i].getId();
System.out.print(p1[i].id);
System.out.print(":");
System.out.println(p1[i].state);
}
System.out.println();
//--
List lst1=new ArrayList();
for(int i1=0;i1<p1.length;++i1) {
if( (1<p1[i1].state )&&(4>p1[i1].state) ) {
lst1.add( new Playe2r(p1[i1].getId(), p1[i1].state) );
}//if(1==p1[i1].getId(i1
}//for(int i1
Iterator it = lst1.iterator();
while(it.hasNext()){
// String s = (String)it.next(). ;
Object obj=it.next();
Playe2r objj=(Playe2r) obj;
System.out.print(objj.getId() );
System.out.print(" ");
System.out.println(objj.state);
}
//==
//-某player1 发起邀请
for (int i1i=1;i1i<99;++i1i) {
int rami=lst1.size();
int no_i=(int) (rami*(Math.random()));
for (int j1=1;j1<rami;++j1) {
if (no_i!=j1) {
//把 (no_i, j1) 这两个参数 分别 传给 邀请的 TestWait 线程(编号为响应的 线程池中的线程……
}//if (no_i!=j1
}//for(int j1=1
}//for int i1i=1
//==
}//main
}//class player1test1
主要的程序就是以上的部分……
至于 利用 “数组”如何传 相应(编号)的参数进去,咱们下回再说(文章已经够长了……)
相关文章推荐
- java 利用jacob调用ocx控件时怎么处理带返回值的参数?
- 利用Java线程Thread实现接口Runnable接口使图片动起来
- 深入理解Java并发机制(5)--线程、中断、Runnable、Callable、Future
- Java:多线程,使用同步锁(Lock)时利用Condition类实现线程间通信
- java 利用数组实现循环队列
- Android/java 利用HttpUrlConnection 发送put请求,携带json参数
- Java与JavaScript 完美实现字符串拆分(利用数组存储)与合并的互逆操作
- Java -- 利用反射 操作任意数组,包括对象数组 和 基本数据类型的数组
- Java阶段性测试--知识点:数组,面向对象,集合、线程,IO流
- java再复习——多线程之初识线程,并从源码角度分析start与run方法,Thread类与Runnable接口
- java调用oracle中输入参数是数组类型的函数或者存储过程
- Java线程(四):Delayed、ScheduledFuture、RunnableScheduledFuture
- 打印Java数组,该怎么解决
- Java 创建线程 实现Runnable接口
- 线程解决:一个长度的30000的int数组,其中放随机数,利用多核的优势,求数组中元素的和
- 黑马程序员——java第十一、十二天:多线程(创建线程1-2、多线程同步代码、实现Runnable接口、安全死锁)
- Java多线程——线程怎么来的?
- java 分别利用synchronized和jdk1.5新特性实现多消费者-多生产者线程的等待唤醒机制
- Java 利用Array.newInstance创建动态数组突破Array本身限制
- java的反射机制(含数组参数)