黑马程序员技术交流社区
标题:
问一个线程里的问题
[打印本页]
作者:
黑马高明辉
时间:
2012-7-16 20:53
标题:
问一个线程里的问题
public static void main(String[] args) {
//创建既定大小的缓冲池。
// ExecutorService threadPool = Executors.newFixedThreadPool(3);
//创建一个缓冲线程池,按照线程的数量来决定缓冲池的大小。
ExecutorService threadPool = Executors.newCachedThreadPool();
//创建一个单线程的缓冲池,始终保持该线程池中有一个线程,如果当前线程结束,那么该方法会再创建一个线程来接替前一个线程。
// ExecutorService threadPool = Executors.newSingleThreadExecutor();
for(int i=1;i<=12;i++){
final int task = i;
threadPool.execute(new Runnable(){
static{
System.out.println("task is committed!");
}
@Override
public void run() {
for(int j=1;j<=5;j++){
try {
Thread.sleep(20);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " is looping of " + j + " for task of " + task);
}
}
});
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("all of 10 tasks have committed! ");
红色代码有错误,说是内部类中不能定义静态代码块,我想问的是:我在new一个Runnable对象的时候,是不是就创建了一个任务,怎样在这个任务初始化的时候输出任务已经创建这样的标识?通过静态代码快看来是不行了,还有别的方法么?
作者:
封明川
时间:
2012-7-16 21:06
把static去掉,
用构造代码块
作者:
山水游客
时间:
2012-7-16 21:50
可以定义一个Task类实现Runnable接口,在造方法中传入task参数,并打印System.out.println("task is committed!");
如此只要Runnable被初始化,标识就会被打印出来!
作者:
陆鹏
时间:
2012-7-17 08:09
本帖最后由 陆鹏 于 2012-7-17 08:10 编辑
楼主的说法有两个问题:
1.普通内部类中是不能定义静态成员,
匿名内部类属于没有名字的普通内部类,当然也不能定义静态成员了
,静态成员也就包括了静态代码块。
当然,静态内部类中可以定义静态或者非静态的成员
2.
你不能new 一个Runnable对象,因为Runnable是接口
,只能new一个Runnable的子类对象。
解决楼主的问题:怎样在这个任务初始化的时候输出任务已经创建这样的标识?
如果是
匿名内部类的话,那就用构造代码块
。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2