使用Runnable对象创建线程

时间:2017-03-26 05:32:24

标签: java multithreading constructor

我正在尝试从java.lang.Runnable实现Runnable的类的对象创建一个线程 但它不起作用。

piyush@piyush-Inspiron-5559:~/Desktop/java_prog$ javac Runnable.java
Runnable.java:27: error: no suitable constructor found for Thread(counter,String)
    Thread td=new Thread(obj,"bac");
              ^
constructor Thread.Thread(Runnable,AccessControlContext) is not applicable
  (argument mismatch; counter cannot be converted to Runnable)
constructor Thread.Thread(ThreadGroup,Runnable) is not applicable
  (argument mismatch; counter cannot be converted to ThreadGroup)
constructor Thread.Thread(ThreadGroup,String) is not applicable
  (argument mismatch; counter cannot be converted to ThreadGroup)
constructor Thread.Thread(Runnable,String) is not applicable
  (argument mismatch; counter cannot be converted to Runnable)
Note: Some messages have been simplified; recompile with - Xdiags:verbose to get full output
1 error

这是错误。   代码如下.........

import java.io.*;
interface Runnable{
public void run(); 
}
class counter implements Runnable {
Thread t=Thread.currentThread();
private int x;
public counter(){x=0;}
public int getval(){return x;}
public void run()
{
    try{
    while(x<5){
        System.out.println(t.getName()+ ":" + (x++));
        Thread.sleep(250);
    }
    System.out.println("Exit from thread:"+t);}
    catch(InterruptedException e){
        System.out.println("InterruptedException");
    }
} 
}
class client {
public static void main(String args[])
{
    counter obj=new counter();
    Thread td=new Thread(obj,"bac");
    td.start();
    int val;
    try{
    do{
        val=obj.getval();
        System.out.println(td.getName()+ ":" + val);
        val=6;
        Thread.sleep(1000);
    }while(val<5);
  }
    catch(InterruptedException e)
    {
        System.out.println("InterruptedException 2");
    }
    System.out.println("Exit from thread:"+td.getName());
    }
}  

我是否必须创建任何线程构造函数。? 或者我要从java.lang库访问Runnable类? 这里的问题是什么?

2 个答案:

答案 0 :(得分:0)

  

我是否必须创建任何线程构造函数。?或者我要访问   java.lang库中的runnable类??这里的问题是什么?

您必须通过调用Thread构造函数并提供java.lang.Thread类型的对象来创建java.lang.Runnable对象。 我建议您查看 Thread类构造 here,以便您可以发现代码的问题。

java.lang.Thread API中的构造函数还有其他风格(重载)可用于创建Thread对象,但首先,您现在可以专注于Thread(Runnable target, String name)理解它(那是你试图在代码中使用的东西)。

您的代码存在的问题是您正在尝试创建自己的Runnable类型对象,然后将其传递给java.lang.Thread 的构造函数,因为您正面临Thread.Thread(Runnable,AccessControlContext)不适用的错误。

为了解决问题,只需删除您的Runnable接口定义并使用一个JDK,即java.lang.Runnable。换句话说,java.lang.Thread类包含java.lang.Runnable接口的构造函数,而Thread类不接受您的Runnable对象。

另外,作为旁注,请记住您需要遵循java命名约定,即类名应该大写(例如class Counter而不是class counter)。

答案 1 :(得分:0)

app/WEB-INF/