Sinlge-thread program in multiple Java VM.

I have a program that spawns two threads: one reads text line by line from a file, and places it in a LinkedBlockingQueue; The other takes stuff off the LinkedBlockingQueue, and processs it (no output to other file). Therefore this is a typical Producer and Consumer setup. I use two threads for one each. The program is run from Windows XP command window.
It runs fine. Processes big text files as expected, even though the CPU % is kind of high. Then, just for fun, I started five command windows to run one instance in each, but with different files. CPU % in task manager spikes to 100%, and the processing in each window slows down dramatically, to only about 2000 rows in every 30 or 40 seconds.
The code posted below is actul code of the program. Runs fine in single command window but terribly slow in multiple windows (with different data file.). The getAnswer() is a bad stuff. I should have had used Callable instead but it is not important.
Can anyone review the code and let me know what is the cause of slowdown, or I just should run it in mulitple instances in multiple command windows?
import java.io.*;
import java.util.*;
import java.util.concurrent.*;
// --------- file reading thread ----------------------
class fReader implements Runnable {
private LinkedBlockingQueue<ArrayList<String>> q=null;
private String input_f=null;
private BufferedReader br=null;
private int total=0;
public fReader(LinkedBlockingQueue<ArrayList<String>> q, String filename) throws IOException {
q=_q;
input_f=file_name;
br=new BufferedReader(new FileReader(input_f));
public int getAnswer(){return total;}
public void run(){
ArrayList<String> tb=new ArrayList<String>();
String s=null;
try {
while(true){
     for (int z=0; z<200; z++) {
          s=br.readLine();
          if (s==null) break;
          total++;
          tb.add(s.trim());
     if (s==null) break;
     q.put(tb);
     tb=new ArrayList<String>();
     Thread.yield();
tb.add(s);
q.put(tb);
br.close();
catch(IOException e1){}
catch(InterruptedException e2){}
// ----- file processing thread ----------
class fProc implements Runnable {
private LinkedBlockingQueue<ArrayList<String>> q=null;
private String output_f=null;
private PrintWriter pw=null;
private String match=null;
private int total=0;
public fProc(LinkedBlockingQueue<ArrayList<String>> q, String filename, String match_s) throws IOException {
output_f=file_name;
q=_q;
pw=new PrintWriter(new BufferedWriter(new FileWriter(output_f)));
match=match_s;
public int getAnswer(){return total;}
public void run(){
ArrayList<String> p=null;
boolean busy=true;
while(busy){
     p=q.poll();
     if (p==null) {
          Thread.yield();
          continue;
// loop, count, and print at the end of the processing
     Iterator ir=p.iterator();
     while(ir.hasNext()){
          String x=(String)ir.next();
          ir.remove();
          if (x==null){
               busy=false; break;
          else {
               String[] m=x.split("[,]");
               String[] n=m[2].split("[\"]"); // null(0), something(1), null(0)
               if (n[1].equals(match))
                    total++;
          Thread.yield();
     p=null;
     System.out.println("Processing");
if (pw!=null) pw.close();
// end of run()     
// end of class
public class pf2 {
private String date_value=null, fn_ext=null;
private File _file=null;
private File _dest=null;
public pf2(){_file=null;_dest=null;}
// -------------- application start point ----------------
public static void main(String[] args) throws IOException{
if (args.length!=1){
     System.out.println("Usage: java pf2 <filename.ext>");
     System.out.println("Example: java pf2 vwo.2011-01-18.csv");
     return;
String inputf=".\\original\\"+args[0];// args[0] is the filename with extension.
String outputf=".\\data\\"+args[0];// args[0] is the filename with extension.
// split the date string in input file name.
String[] date_s=args[0].split("[.]+")[1].split("[-]+");
String date2=String.format(
     "%s/%s/%s",
     Integer.toString(Integer.parseInt(date_s[1])),
     Integer.toString(Integer.parseInt(date_s[2])),
     Integer.toString(Integer.parseInt(date_s[0]))
ExecutorService es=Executors.newFixedThreadPool(4);
LinkedBlockingQueue<ArrayList<String>> q=new LinkedBlockingQueue<ArrayList<String>>();
fReader input=null;
fProc output=null;
try {
     input=new fReader(q, inputf);
     output=new fProc(q, outputf, date2);
catch(IOException e3){
     System.out.println(e3.getMessage());
     return;
// starts the program here
System.out.println("Running ....");
es.execute(input);
es.execute(output);
es.shutdown();
while(!es.isTerminated());
System.out.printf("Read %d row(s), %d of them are good.\n", input.getAnswer(), output.getAnswer());
float v=new Integer(output.getAnswer()).floatValue()/new Integer(input.getAnswer()).floatValue();
System.out.printf("Bad rate=%.2f%%.\n", (1-v)*100);
System.out.print("Press a key to continue.");
while(System.in.read()==-1);
// end of main()
// end of class pf
}

As @EJP suggests, disk work best when read serially. When the OS detects you are reading a file serially it will prefetch the next data you need. You may find that removing the reader thread is faster as you are doubling up what the OS does for you.
However, when you read multiple files from the same disk the head has to move around more, slowing it down significantly. I would suggest only using multiple readers when you have multiple independent disks. (Though I have never seen this work well on Windows, only on Unix)

Similar Messages

  • Running a Java Multi Thread Program in database

    I have created a multi threaded program in Java and it runs successfully from the command prompt. I want to create a DBMS Job which will wake up at regular intervals and runs the java program(Java stored procedure). Is this possible in 9.2/10G ?? If Yes, will there be any impact on the DB performance/increase memory etc.,
    The database (9.2...) resides on a RH 2.3 AS box.
    Any ideas...
    Thanks,
    Purush

    Purush,
    Java stored procedures cannot be multi-threaded. Well, they can, but the threads will not run in parallel. You may be able to find some more information in the Oracle documentation, which is available from:
    http://tahiti.oracle.com
    Good Luck,
    Avi.

  • Why this Java Thread program doesn't work as expected?

    Hello all:
    I have a java code as follows:
    My question is why tryThreadB which is set as deamon thread still run
    after the main program return?
    the output of this program looks like:
    HopalongMarilyn HopalongMarilyn HopalongMarilyn HopalongMarilyn HopalongMarilyn Ending main()
    HopalongMarilyn HopalongMarilyn HopalongMarilyn HopalongMarilyn HopalongMarilyn HopalongMarilyn
    However, I think the correct output should be:
    HopalongMarilyn HopalongMarilyn HopalongMarilyn HopalongMarilyn HopalongMarilyn Ending main()
    Hopalong Hopalong Hopalong Hopalong Hopalong Hopalong Hopalong Hopalong
    ====================================
    <pre>
    import java.io.*;
    public class TryThread extends Thread {
    private String firstName;
    public TryThread(String firstName) {
    this.firstName = firstName;
    public static void main(String[] args) {
    TryThread tryThreadA = new TryThread("Hopalong");
    TryThread tryThreadB = new TryThread("Marilyn ");
    // user thread
    tryThreadA.setDaemon(false);
    // daemon thread
    tryThreadB.setDaemon(true);
    tryThreadA.start();
    tryThreadB.start();
    try {
    sleep(5000);
    catch (InterruptedException ex) {
    System.out.println("Ending main()");
    return;
    public void run() {
    try {
    while(true) {
    System.out.print(firstName);
    sleep(1000);
    catch (InterruptedException ex) {
    System.out.println(ex);
    </pre>
    ====================================
    thank you very much

    Hi,
    From the Thread documentation:
    When a Java Virtual Machine starts up, there is usually a single non-daemon thread (which typically calls
    the method named main of some designated class). The Java Virtual Machine continues to execute
    threads until either of the following occurs:
        * The exit method of class Runtime has been called and the security manager has permitted the exit
    operation to take place.
        * All threads that are not daemon threads have died, either by returning from the call to the run method
    or by throwing an exception that propagates beyond the run method.A daemon thread will not stop after the main method returns. It will stop when there are only daemon threads executing.
    So, in your case, thread B will continue to execute as long as thread A (or any other non-daemon thread) is alive.
    /Kaj

  • Calling pl/sql api through multiple java threads

    Hi All,
    I need to call a pl/sql api from multiple java threads simultaneously and all thread will use same db connection.
    I want to know if all the threads will simultaneously call the pl/sql api then will the local variable inside pl/sql procedure be shared between them or they will get separate instances of variables.
    TIA

    You cannot make multiple parallel client calls over the same Oracle session handle. There is a single non-threaded/non-fibre serialised server process servicing client requests for that session. (physical process on Linux/Unix, thread in the oracle.exe process on Windows).
    Each thread on the client side, needs its very own Oracle session. Thus each thread will have a server process footprint on the server. Which could be problematic if 10 clients each starts 10 threads - as it means a 100 processes on the server are needed to service these client threads.
    Have a look at Overview of OCI Multithreaded Development in the Oracle® Call Interface Programmer's Guide for how to use the threading call interface of the OCI - as oppose to rolling your own where each thread manually needs to deal with is OCI session context.

  • Paul Hyde's Java Thread Programming

    I have Paul Hyde's Java Thread Programming and I am wondering if it is a comprehensive book for learning the nuts n bolts of threads. I know how to use threads however I want to learn the inner details. Doug Lea's book is perhaps a better option but Paul Hyde's book seems more readiable.
    Any comments are appreciated.
    cheers

    Sounded interesting, found this link
    http://www.javaspecialists.co.za/archive/Issue056.html

  • Need help with java thread program

    Hi
    I have an applet which does some painting etc, i need to write a thread which runs in background, and if there is no user activity for 30 min will refresh the screen.
    I have one good thing that all user options go from one program so i know when user does some thing.
    How do i write this thread program?
    1. I need this program to start counter as soon as some activity is done by user
    2. When user does some thing stop this thread
    3. when user completes his action restart the thread with 30 min timer.
    4. when there is no activity for 30 min refresh the screen
    Any help will be really good
    Ashish

    Not sure what the problem is. Your pseudo code looks good to me.
    The only suggestion I would make is that your use a Timer so you don't have to worry about creating your own Thread. You schedule a Timer to fire in 30 minutes. Everytime you have activiity you cancel the timer and reschedule it.

  • Problem with threads, program always crash

    new to threads, may be doing something COMPLETELY wrong. When I run the program I get a couple of NullPointerExceptions in Thread-0 and Thread-1. I'm confused because it screws up when I call size() for arrayList, and in the API size doesn't throw anything.
    public class ProducerConsumerRunner
       public static void main(String args[])
          Queue q = new Queue(QUEUE_MAX_SIZE);
          ProducerRunnable producer = new ProducerRunnable(q, ITERATIONS);
          ConsumerRunnable consumer = new ConsumerRunnable(q, ITERATIONS);
          //works good up to here
          Thread t1 = new Thread(producer);
          Thread t2 = new Thread(consumer);
          t1.start();
          t2.start();
       private static int ITERATIONS = 50;
       private static int QUEUE_MAX_SIZE = 25;
    import java.util.ArrayList;
    import java.util.concurrent.locks.ReentrantLock;
    public class Queue {
         public Queue(int maxSize)
              list = new ReentrantLock();
              underLimit = list.newCondition();
              MAX_SIZE = maxSize;
         public void add(String line)
              list.lock();
              try{
                           System.out.println("add method of Queue");
                   while(record.size() >= MAX_SIZE){//things get screwed up when this condition is evaluated
                        //size method is crashing the program
                        System.out.println("2");
                        underLimit.await();
                        System.out.println("3");
                   record.add(line);
              }catch(java.lang.InterruptedException e){
                   System.out.println("await interupted: "+e.getMessage());
              }finally{
                   list.unlock();
         public void remove(int line)
              list.lock();
              record.remove(line);
              list.unlock();
         public  ArrayList<String> record;
         private final ReentrantLock list;
         private final java.util.concurrent.locks.Condition underLimit;
         private final int MAX_SIZE;
    import java.util.Date;
    public class ProducerRunnable implements Runnable{
         public ProducerRunnable(Queue q, int itterations)
              this.q = q;
              ITTERATIONS = itterations;
         public void run()
              String date;
              for(int i = 0; i<ITTERATIONS; i++)
                   date = new Date().toString();
                   q.add(date);//this is where it screws up
                   System.out.println(date+" added");
                   try{
                   Thread.sleep(100);
                   }catch(java.lang.InterruptedException e){
                        System.out.println("ProduccerRunnable's sleep was interupted");
         private final Queue q;
         private final int ITTERATIONS;
    public class ConsumerRunnable implements Runnable{
         public ConsumerRunnable(Queue q, int itterations)
              this.q = q;
              ITTERATIONS = itterations;
         public void run()
              //Queue q = new Queue();
              int length;
              for(int i = 0; i<ITTERATIONS; i++)
                   length = q.record.size();//things are getting screwed up here
                   while(q.record.get(length) == null)
                        length--;
                   System.out.println((String)q.record.get(length));
                   q.remove(length);
                   try{
                   Thread.sleep(100);
                   }catch(java.lang.InterruptedException e){
                        System.out.println("ConsumerRunnable's sleep was interupted");
         private final Queue q;
         private final int ITTERATIONS;
    }

    question:
    this works right
         public void remove()
              list.lock();
              int line = 0;
              try{
                   *while(record.size() < 1)*
                        range.await();
                   record.remove(line);
                   range.signalAll();
              }catch(java.lang.InterruptedException e){
                   System.out.println("await interupted: "+e.getMessage());
              }finally{
                   list.unlock();
         }this is deadlock
    *int list = 0;*
    *while((list = record.size)<1) was screwing things up because of the assignment*record is ArrayList of strings. when better to use Vector instead of ArrayList? i notice no differnce and i use threads
    initially I thought record.size was being evaluated and before could be assigned to list, time slice ran out. this could not be case because I use ReentrantLock (list) to lock it.
    Edited by: bean-planet on Apr 1, 2009 4:31 PM

  • How do I run multiple java apps in one JVM to reduce memory use?

    Hi all,
    I saw an article either on the web or in a magazine not too long ago about how to "detect" if the app is already running, and if so, it hands off the new instance to the already running JVM, which then creates a thread to run the Java app in. As it turns out, my app will be used in an ASP environment, through Citrix. We may have as many as 50 to 100 users running the same app, each with their own unique user ID, but all using the same one server to run it on. Each instance eats up 25MB of memory right now. So the question is if anybody knows of a URL or an app like this that can handle the process of running the same (or even different Java) apps in one JVM as separate threads, instead of requring several instances of the JVM to run? I know this article presented a fully working example, and I believe I know enough to do it but I wanted ot use the article as a reference to make sure it is done right. I know that each app basically would use the same one "launcher" program that would on first launch "listen" to a port, as well as send a message through the port to see if an existing launcher was running. If it does, it hands off the Java app to be run to the existing luancher application and shuts down the 2nd launching app. By using this method, the JVM eats up its normal memory, but each Java app only consumes its necessary memory as well and doesn't use up more JVM instance memory.
    Thanks.

    <pre>
    import java.util.Properties;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.lang.reflect.Method;
    import java.lang.reflect.InvocationTargetException;
    import java.util.Enumeration;
    import java.util.NoSuchElementException;
    public class RunProg implements Runnable, Cloneable
    private String iProg;
    private String iArgs[];
    public static void main(String args[])
    new RunProg().main();
    // first step is to start main program itself
    private void main()
    Properties properties = System.getProperties();
    try
    properties.load(new FileInputStream("RunProg.properties"));
    catch(IOException e)
    System.setProperties(properties);
    int i = 0;
    System.out.println("enter main, activeCount=" + Thread.activeCount());
    while(true)
    String program = properties.getProperty("Prog" + i);
    if(program == null)
    break;
    StringTokenizer st = new StringTokenizer(program);
    String[] args = new String[st.countTokens() - 1];
    try
    RunProg rp = (RunProg)this.clone();
    rp.iProg = st.nextToken();
    for(int j = 0; st.hasMoreTokens(); j++)
         args[j] = st.nextToken();
    rp.iArgs = args;
    Thread th = new Thread(rp);
    th.setName("prog" + i + "=" + program);
    th.start();
    System.out.println("prog" + i + "=" + program + ", started");
    catch(CloneNotSupportedException e)
    System.out.println("prog" + i + "=" + program + ", can't start");
    i++;
         System.out.println("end of main, activeCount=" + Thread.activeCount());
    // next step is to start all others one by one
    public void run()
    try
    Class c = Class.forName(iProg);
    Class p[] = new Class[1];
    p[0] = String[].class;
    Method m = c.getMethod("main", p);
    Object o[] = new Object[1];
    o[0] = iArgs;
    m.invoke(null, o);
    catch(ClassNotFoundException e)
    System.out.println(iProg + "ClassNotFoundException");
    catch(NoSuchMethodException e)
    System.out.println(iProg + "NoSuchMethodException");
    catch(InvocationTargetException e)
    System.out.println(iProg + "NoSuchMethodException");
    catch(IllegalAccessException e)
    System.out.println(iProg + "NoSuchMethodException");
    System.out.println(Thread.currentThread().getName() + ", ended");
    System.out.println("exit run, activeCount=" + Thread.activeCount());
    // setup SecurityManager to disable method System.exit()
    public RunProg()
         SecurityManager sm = new mySecurityManager();
         System.setSecurityManager(sm);
    // inner-class to disable method System.exit()
    protected class mySecurityManager extends SecurityManager
         public void checkExit(int status)
              super.checkExit(status);
              Thread.currentThread().stop();
              throw new SecurityException();
    * inner-class to analyze StringTokenizer. This class is enhanced to check double Quotation marks
    protected class StringTokenizer implements Enumeration
    private int currentPosition;
    private int maxPosition;
    private String str;
    private String delimiters;
    private boolean retTokens;
    * Constructs a string tokenizer for the specified string. All
    * characters in the <code>delim</code> argument are the delimiters
    * for separating tokens.
    * <p>
    * If the <code>returnTokens</code> flag is <code>true</code>, then
    * the delimiter characters are also returned as tokens. Each
    * delimiter is returned as a string of length one. If the flag is
    * <code>false</code>, the delimiter characters are skipped and only
    * serve as separators between tokens.
    * @param str a string to be parsed.
    * @param delim the delimiters.
    * @param returnTokens flag indicating whether to return the delimiters
    * as tokens.
    public StringTokenizer(String str, String delim, boolean returnTokens)
    currentPosition = 0;
    this.str = str;
    maxPosition = str.length();
    delimiters = delim;
    retTokens = returnTokens;
    * Constructs a string tokenizer for the specified string. The
    * characters in the <code>delim</code> argument are the delimiters
    * for separating tokens. Delimiter characters themselves will not
    * be treated as tokens.
    * @param str a string to be parsed.
    * @param delim the delimiters.
    public StringTokenizer(String str, String delim)
    this(str, delim, false);
    * Constructs a string tokenizer for the specified string. The
    * tokenizer uses the default delimiter set, which is
    * <code>"&#92;t&#92;n&#92;r&#92;f"</code>: the space character, the tab
    * character, the newline character, the carriage-return character,
    * and the form-feed character. Delimiter characters themselves will
    * not be treated as tokens.
    * @param str a string to be parsed.
    public StringTokenizer(String str)
    this(str, " \t\n\r\f", false);
    * Skips delimiters.
    protected void skipDelimiters()
    while(!retTokens &&
    (currentPosition < maxPosition) &&
    (delimiters.indexOf(str.charAt(currentPosition)) >= 0))
    currentPosition++;
    * Tests if there are more tokens available from this tokenizer's string.
    * If this method returns <tt>true</tt>, then a subsequent call to
    * <tt>nextToken</tt> with no argument will successfully return a token.
    * @return <code>true</code> if and only if there is at least one token
    * in the string after the current position; <code>false</code>
    * otherwise.
    public boolean hasMoreTokens()
    skipDelimiters();
    return(currentPosition < maxPosition);
    * Returns the next token from this string tokenizer.
    * @return the next token from this string tokenizer.
    * @exception NoSuchElementException if there are no more tokens in this
    * tokenizer's string.
    public String nextToken()
    skipDelimiters();
    if(currentPosition >= maxPosition)
    throw new NoSuchElementException();
    int start = currentPosition;
    boolean inQuotation = false;
    while((currentPosition < maxPosition) &&
    (delimiters.indexOf(str.charAt(currentPosition)) < 0 || inQuotation))
    if(str.charAt(currentPosition) == '"')
    inQuotation = !inQuotation;
    currentPosition++;
    if(retTokens && (start == currentPosition) &&
    (delimiters.indexOf(str.charAt(currentPosition)) >= 0))
    currentPosition++;
    String s = str.substring(start, currentPosition);
    if(s.charAt(0) == '"')
    s = s.substring(1);
    if(s.charAt(s.length() - 1) == '"')
    s = s.substring(0, s.length() - 1);
    return s;
    * Returns the next token in this string tokenizer's string. First,
    * the set of characters considered to be delimiters by this
    * <tt>StringTokenizer</tt> object is changed to be the characters in
    * the string <tt>delim</tt>. Then the next token in the string
    * after the current position is returned. The current position is
    * advanced beyond the recognized token. The new delimiter set
    * remains the default after this call.
    * @param delim the new delimiters.
    * @return the next token, after switching to the new delimiter set.
    * @exception NoSuchElementException if there are no more tokens in this
    * tokenizer's string.
    public String nextToken(String delim)
    delimiters = delim;
    return nextToken();
    * Returns the same value as the <code>hasMoreTokens</code>
    * method. It exists so that this class can implement the
    * <code>Enumeration</code> interface.
    * @return <code>true</code> if there are more tokens;
    * <code>false</code> otherwise.
    * @see java.util.Enumeration
    * @see java.util.StringTokenizer#hasMoreTokens()
    public boolean hasMoreElements()
    return hasMoreTokens();
    * Returns the same value as the <code>nextToken</code> method,
    * except that its declared return value is <code>Object</code> rather than
    * <code>String</code>. It exists so that this class can implement the
    * <code>Enumeration</code> interface.
    * @return the next token in the string.
    * @exception NoSuchElementException if there are no more tokens in this
    * tokenizer's string.
    * @see java.util.Enumeration
    * @see java.util.StringTokenizer#nextToken()
    public Object nextElement()
    return nextToken();
    * Calculates the number of times that this tokenizer's
    * <code>nextToken</code> method can be called before it generates an
    * exception. The current position is not advanced.
    * @return the number of tokens remaining in the string using the current
    * delimiter set.
    * @see java.util.StringTokenizer#nextToken()
    public int countTokens()
    int count = 0;
    int currpos = currentPosition;
    while(currpos < maxPosition)
    * This is just skipDelimiters(); but it does not affect
    * currentPosition.
    while(!retTokens &&
    (currpos < maxPosition) &&
    (delimiters.indexOf(str.charAt(currpos)) >= 0))
    currpos++;
    if(currpos >= maxPosition)
    break;
    int start = currpos;
    boolean inQuotation = false;
    while((currpos < maxPosition) &&
    (delimiters.indexOf(str.charAt(currpos)) < 0 || inQuotation))
    if(str.charAt(currpos) == '"')
    inQuotation = !inQuotation;
    currpos++;
    if(retTokens && (start == currpos) &&
    (delimiters.indexOf(str.charAt(currpos)) >= 0))
    currpos++;
    count++;
    return count;
    </pre>
    RunProg.properties like this:
    Prog1=GetEnv 47838 837489 892374 839274
    Prog0=GetEnv "djkfds dfkljsd" dsklfj

  • Thread programming -  variable might not have been initialized

    Hi there,
    Probably a fairly simple one here (quite new to java), i'm trying to do some thread programming but I get this error.
    ThreadController.java:42: variable dataGeneratorThread might not have been initialized
    dataGeneratorThread.activeCount();
    The bit I dont understand is that I run
    this line here
    for(int i=0; i < JuliaFrame.NO_OF_DATA_GENERATORS; i++){
    dataGenerators[i] = new DataGenerator(JuliaFrame.ImageWidth,JuliaFrame.ImageHeight,inputBuffer);
    dataGeneratorThread = new WorkerThread(dataGenerators,juliaCalc,displayBuffer);
    dataGeneratorThread.start();
    but when I do
    dataGeneratorThread.activeCount()
    is balks.
    I check that the thread is alive first but dont no how to tell the compiler this - obviously NO_OF_DATA_GENERATORS could be 0 in which case the compiler would have issues - I just wish it was more trusting ;)
    Here is some of the code
    runable class{
    new Thread( new ThreadController(inputBuffer,displayBuffer,juliaCalc) ).start();
    public class ThreadController implements Runnable {
    DataBuffer inputBuffer;
    DataBuffer displayBuffer;
    JuliaCalc juliaCalc;
    /** Creates a new instance of ThreadController */
    public ThreadController(DataBuffer inputBuffer,DataBuffer displayBuffer,JuliaCalc juliaCalc) {
    inputBuffer = inputBuffer;
    displayBuffer = displayBuffer;
    juliaCalc = juliaCalc;
    public void run()
    DataGenerator[] dataGenerators = new DataGenerator[JuliaFrame.NO_OF_DATA_GENERATORS];
         WorkerThread dataGeneratorThread;
         for(int i=0; i < JuliaFrame.NO_OF_DATA_GENERATORS; i++){
    dataGenerators[i] = new DataGenerator(JuliaFrame.ImageWidth,JuliaFrame.ImageHeight,inputBuffer);
    dataGeneratorThread = new WorkerThread(dataGenerators[i],juliaCalc,displayBuffer);
    dataGeneratorThread.start();
    dataGeneratorThread.activeCount();
    int nNanoSecsBeforeCheck = 50;
    while(true)
    if(dataGeneratorThread.isAlive()){
    if(dataGeneratorThread.activeCount() > inputBuffer.size())
    public class DataGenerator implements Runnable {
    int nImageWidth;
    int nImageHeight;
    DataBuffer inputBuffer;
    public DataGenerator(int ImageWidth, int ImageHeight,DataBuffer inputBuffer) {
    nImageWidth = ImageWidth;
    nImageHeight = ImageHeight;
    public void run()
    // Non terminating thread - created datapakets and place them in the input buffer
    // Get two radom number withoin a bound and find out bout default highest colou - 3rd value
    while(true)
    int nRandomXCord;
    int nRandomYCord;
    nRandomXCord = ((int)(Math.random() * nImageWidth));
    nRandomYCord = ((int)(Math.random() * nImageHeight));
    DataPacket dpDataPacket = new DataPacket(nRandomXCord, nRandomYCord, 233);
    inputBuffer.put(dpDataPacket);

    Sorry about that, didnt realise.
    Hi there,
    Probably a fairly simple one here (quite new to java), i'm trying to do some thread programming but I get this error.
    ThreadController.java:42: variable dataGeneratorThread might not have been initialized
    The bit I dont understand is that I run
    this line here
    this line here
    for(int i=0; i < JuliaFrame.NO_OF_DATA_GENERATORS; i++){
    dataGenerators = new DataGenerator(JuliaFrame.ImageWidth,JuliaFrame.ImageHeight,inputBuffer);
    dataGeneratorThread = new WorkerThread(dataGenerators,juliaCalc,displayBuffer);
    dataGeneratorThread.start();
    }but when I do
    dataGeneratorThread.activeCount() is balks.
    I check that the thread is alive first but dont no how to tell the compiler this - obviously NO_OF_DATA_GENERATORS could be 0 in which case the compiler would have issues - I just wish it was more trusting ;)
    Here is some of the code
    runable class{
    new Thread( new ThreadController(inputBuffer,displayBuffer,juliaCalc) ).start();
    public class ThreadController implements Runnable {
    DataBuffer inputBuffer;
    DataBuffer displayBuffer;
    JuliaCalc juliaCalc;
    /** Creates a new instance of ThreadController */
    public ThreadController(DataBuffer inputBuffer,DataBuffer displayBuffer,JuliaCalc juliaCalc) {
    inputBuffer = inputBuffer;
    displayBuffer = displayBuffer;
    juliaCalc = juliaCalc;
    public void run()
    DataGenerator[] dataGenerators = new DataGenerator[JuliaFrame.NO_OF_DATA_GENERATORS];
    WorkerThread dataGeneratorThread;
    for(int i=0; i < JuliaFrame.NO_OF_DATA_GENERATORS; i++){
    dataGenerators = new DataGenerator(JuliaFrame.ImageWidth,JuliaFrame.ImageHeight,inputBuffer);
    dataGeneratorThread = new WorkerThread(dataGenerators,juliaCalc,displayBuffer);
    dataGeneratorThread.start();
    dataGeneratorThread.activeCount();
    int nNanoSecsBeforeCheck = 50;
    while(true)
    if(dataGeneratorThread.isAlive()){
    if(dataGeneratorThread.activeCount() > inputBuffer.size())
    public class DataGenerator implements Runnable {
    int nImageWidth;
    int nImageHeight;
    DataBuffer inputBuffer;
    public DataGenerator(int ImageWidth, int ImageHeight,DataBuffer inputBuffer) {
    nImageWidth = ImageWidth;
    nImageHeight = ImageHeight;
    public void run()
    // Non terminating thread - created datapakets and place them in the input buffer
    // Get two radom number withoin a bound and find out bout default highest colou - 3rd value
    while(true)
    int nRandomXCord;
    int nRandomYCord;
    nRandomXCord = ((int)(Math.random() * nImageWidth));
    nRandomYCord = ((int)(Math.random() * nImageHeight));
    DataPacket dpDataPacket = new DataPacket(nRandomXCord, nRandomYCord, 233);
    inputBuffer.put(dpDataPacket);
    }

  • Thread program: Strange output

    Hi,
    I have written a simple thread program. Previously I was trying to print hello world in the run method, the I changed it to print the value of a static data member, but strangely its still printing hello World. However if I change the print statement in the main method, it is reflected in the output but the changes to the print statement are not. Its always hello World output. I have changed the name of file, recompile it, close the shell window, restarted the computer but always the output is hello world. Can somebody help me with that. My objetive is to prove that data segment is shred in threads.
    public class Share2 extends Thread{
    static int Data=10;
       public void run ( ) {
        Data=Data+10;
         System.out.println("Data="+Data);
      public static void main (String[ ] args ) {
        First obj=new First ( );
        obj.start ( );
        System.out.println("Data ^^^^in!!! 9999main****="+Data);
    }D:\javaprogs\misc\threads>javac Share2.java
    D:\javaprogs\misc\threads>java Share2
    Data ^^^^in!!! 9999main****=10
    Hello World
    D:\javaprogs\misc\threads>javac Share2.java
    D:\javaprogs\misc\threads>java Share2
    Data ^^^^in!!! 9999main****=10
    Hello World
    D:\javaprogs\misc\threads>
    Zulfi.

    public class Share2 extends Thread{
    static int Data=10;
    public void run ( ) {
    Data=Data+10;
    System.out.println("Data="+Data);
    public static void main (String[ ] args ) {
    First obj=new First ( );<<<<< what is First? >>>>>>
    obj.start ( );
    System.out.println("Data ^^^^in!!!
    n!!! 9999main****="+Data);
    D:\javaprogs\misc\threads>javac Share2.java
    D:\javaprogs\misc\threads>java Share2
    Data ^^^^in!!! 9999main****=10
    Hello World
    D:\javaprogs\misc\threads>javac Share2.java
    D:\javaprogs\misc\threads>java Share2
    Data ^^^^in!!! 9999main****=10
    Hello World
    D:\javaprogs\misc\threads>
    Zulfi.

  • How to program this in java? Please help

    How to program this in java?
    please explain steps, it has to come out like this:
    example
    input: 3b1w3b
    output:
    BBBWBBB

    import java.io.*;
    public class Test {
    static java.io.PrintStream o = java.lang.System.out;
    public static void main(String[] args)throws Exception {      
         BufferedReader BR = new BufferedReader(new InputStreamReader(System.in));
         System.out.print("Enter plot for printing: ");
         String s = BR.readLine();
         char[] cs = s.toLowerCase().toCharArray();
         for(int i=0, j=0; i < cs.length-0x1; i+=0x2, j=0)
              while(j++ < (int)(cs[i]-0x30))
                   o.print((char)(cs[i+0x1]-0x20));
    I tried changeing it to this so I can enter my own string, but I want to change it some more so that it can enter multiple input separated by space, so that it can form a sort of picture line by line. I tried using tolkenizer but I get errors. I dont know how to use tolkenizer properly can anyone please TEACH. you dont have to tell how or give me the code if you dont want to. yes I know Im a noob and I dont know java as good as everyone here, If everyone thinks I don't deserve help then DON'T help, I'm just trying to learn programming

  • Can't understand this thread program.

    Hi ..this is a part of program from http://java.sun.com/docs/books/tutorial/essential/concurrency/simple.html ..I dnt understand the last block in the following program,the one starting from "if (args.length > 0) { ......."
    can somebody tell why is it used?
    public static void main(String args[]) throws InterruptedException {
            //Delay, in milliseconds before we interrupt MessageLoop
            //thread (default one hour).
            long patience = 1000 * 60 * 60;
            //If command line argument present, gives patience in seconds.
            if (args.length > 0) {
                try {
                    patience = Long.parseLong(args[0]) * 1000;
                } catch (NumberFormatException e) {
                    System.err.println("Argument must be an integer.");
                    System.exit(1);
            }

    Well it says in the code comments:
    //Delay, in milliseconds before we interrupt MessageLoop
            //thread (default one hour).So I am guessing that that is the delay period, but the snippet of code you pasted actually does nothing except set a value patience and then look for a command line argument and if it exists attempts to set patience to that value.

  • I am trying to use an education program that needs Java applets to install and use and it will not use Safari. When I download IE from the web it will not install. How can I get a browser that will work on my MacAir for travel use of this program?

    I am trying to use and education program that needs Java applets and it will not run on Safari. IE will not install from the web. How do I get a browser that will work to install so I can use this program when I travel.

    Try using FireFox. IE will only run on a Mac if you run Windows on the Mac.
    Windows on Intel Macs
    There are presently several alternatives for running Windows on Intel Macs.
    Install the Apple Boot Camp software.  Purchase Windows 7 or Windows 8.  Follow instructions in the Boot Camp documentation on installation of Boot Camp, creating Driver CD, and installing Windows.  Boot Camp enables you to boot the computer into OS X or Windows.
    Parallels Desktop for Mac and Windows XP, Vista Business, Vista Ultimate, or Windows 7.  Parallels is software virtualization that enables running Windows concurrently with OS X.
    VM Fusion and Windows XP, Vista Business, Vista Ultimate, or Windows 7.  VM Fusion is software virtualization that enables running Windows concurrently with OS X.
    CrossOver which enables running many Windows applications without having to install Windows.  The Windows applications can run concurrently with OS X.
    VirtualBox is a new Open Source freeware virtual machine such as VM Fusion and Parallels that was developed by Solaris.  It is not as fully developed for the Mac as Parallels and VM Fusion.
    Note that Parallels and VM Fusion can also run other operating systems such as Linux, Unix, OS/2, Solaris, etc.  There are performance differences between dual-boot systems and virtualization.  The latter tend to be a little slower (not much) and do not provide the video performance of the dual-boot system. See MacTech.com's Virtualization Benchmarking for comparisons of Boot Camp, Parallels, and VM Fusion. A more recent comparison of Parallels, VM Fusion, and Virtual Box is found at Virtualization Benchmarks- Parallels 10 vs. Fusion 7 vs. VirtualBox. Boot Camp is only available with Leopard and later. Except for Crossover and a couple of similar alternatives like DarWine you must have a valid installer disc for Windows.
    You must also have an internal optical drive for installing Windows. Windows cannot be installed from an external optical drive.

  • Single concurrent program for multiple operating units

    HI
    I am working on XML/BI publisher to generate AR invoice reports.
    We have single rdf report using which rtf templates are generated.
    There are 10 operating units (10 ORG_ID's) and 10 rtf templates, one for each operating unit. There are 4 different responsibilities for each ORG_ID
    Eg: ORG_ID's = 11, 12, 13, 14..........etc
    Eg: Responsibility = xx, yy, zz...........etc
    I want to register a single concurrent program. When a user submits a request from "XX" responsibility, then the template associated with that org_id should be generated. Whichever responsibility the user is accessing from, that particular template must be shown as output.
    How can i register one concurrent program for multiple operating units.
    Thanks!
    Edited by: 994628 on Mar 18, 2013 4:39 PM
    Edited by: 994628 on Mar 18, 2013 4:42 PM

    >
    There are 10 operating units (10 ORG_ID's) and 10 rtf templates, one for each operating unit. There are 4 different responsibilities for each ORG_ID
    Eg: ORG_ID's = 11, 12, 13, 14..........etc
    Eg: Responsibility = xx, yy, zz...........etc
    I want to register a single concurrent program. When a user submits a request from "XX" responsibility, then the template associated with that org_id should be generated. Whichever responsibility the user is accessing from, that particular template must be shown as output.
    >
    interesting case for 10 OE set 10 template
    what is purpose? for each OE different requirements for layout?
    BTW
    if each Responsibility associated with one org_id then
    - you can get current org_id when you run concurrent program
    - create main template (will be #11) with condition like
    <?choose:?>
    <?when: ORG_ID=11?>
    <?import:xdo://FND.XX11_SUB.en.00/?>
    <?call:TEMPLATE11?>
    <?end when?>
    <?when: ORG_ID=12?>
    <?import:xdo://FND.XX12_SUB.en.00/?>
    <?call:TEMPLATE12?>
    <?end when?>
    <?otherwise:?>
    <?import:xdo://FND.XX21_SUB.en.00/?>
    <?call:TEMPLATE21?>
    <?end otherwise?>
    <?end choose?>so based on org_id will be import of needed subtemplate
    - re-register your "10 rtf templates" as subtemplates
    another way is substitution of template for concurrent then it running
    in before_report trigger set needed template
    l_conc_request_id := fnd_global.conc_request_id;
        if ORG_ID = 11 then
          UPDATE fnd_conc_pp_actions t
             SET t.argument2 = 'XX11'
           where t.concurrent_request_id = l_conc_request_id
             and t.action_type = 6;
      if ORG_ID = 21 then
          UPDATE fnd_conc_pp_actions t
             SET t.argument2 = 'XX21'
           where t.concurrent_request_id = l_conc_request_id
             and t.action_type = 6;

  • Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

    Hello everyone ... sorry for my English but I am an Italian boy with a problem that is not answered.
    I had to create a web application-service (created in Java with NetBeans 6.7) which is connected to a database postgresql (8.3.5) and for connection to the server using tomcat (3.2.4) through SOAP messages (2_2).
    OPERATING SYSTEM: WINXP
    I have created classes ... I created the database ... completed the project in NetBeans without any errors ... implemented the necessary libraries in the project (also ).... 8.3.604.jar jdbc tomcat configured and soap ... .. and set the environment variables (soap, mail, send in xerces )...... run the application on the NetBeans appears the login screen of my web service .....
    enter username and password (exactly!) and the NetBeans gives me an Exception:
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
            at Intro.loginActionPerformed(Intro.java:522)
            at Intro.access$100(Intro.java:21)
            at Intro$2.actionPerformed(Intro.java:111)
            at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
            at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
            at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
            at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
            at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
            at java.awt.Component.processMouseEvent(Component.java:6263)
            at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
            at java.awt.Component.processEvent(Component.java:6028)
            at java.awt.Container.processEvent(Container.java:2041)
            at java.awt.Component.dispatchEventImpl(Component.java:4630)
            at java.awt.Container.dispatchEventImpl(Container.java:2099)
            at java.awt.Component.dispatchEvent(Component.java:4460)
            at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
            at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
            at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
            at java.awt.Container.dispatchEventImpl(Container.java:2085)
            at java.awt.Window.dispatchEventImpl(Window.java:2475)
            at java.awt.Component.dispatchEvent(Component.java:4460)
            at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
            at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
            at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
            at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
            at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
    Java Result: 1
    BUILD SUCCESSFUL (total time: 31 seconds)  The line 522 Intro class is as follows:
    private void loginActionPerformed(java.awt.event.ActionEvent evt) {                                     
            try {
                URL address= new URL("http://"+ip+":8080/soap/servlet/rpcrouter");
                //Costruzione della chiamata
                Call chiamata = new Call();
                chiamata.setTargetObjectURI("urn:server");
                chiamata.setMethodName("controllaAgenzia");
                chiamata.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
                //creazione parametri che dovro' passare al soap
                Vector<Parameter> params = new Vector<Parameter>();
                String u = user.getText();
                String p = String.valueOf(password.getPassword());
                params.addElement(new Parameter("user", String.class, u, null));
                params.addElement(new Parameter("password", String.class, p, null));
                chiamata.setParams(params);//parametri passati al soap
                try {
                    //Invocazione RPC
                    Response respons = chiamata.invoke(address, "");
                    //qui ho la risposta inviata dal server
                    *Parameter par = respons.getReturnValue();*
                    Object value = par.getValue();
                    String REP = String.valueOf(value);
                    System.out.println(REP);
                    if (REP.equals("ACK_agenzia")) {
                        new MainAgenzia(ip);
                        this.dispose();
                    } else if (REP.equals("NACK_agenzia")) {
                        JOptionPane.showMessageDialog(null, "I dati inseriti non sono corretti", "Errore", JOptionPane.ERROR_MESSAGE);
                        password.setText("");
                        user.setText("");
                    } The strange thing is that this web service was running just finished the project.
    After 4-5 days of its operation has stopped, creandomi this problem.
    I think the answer is, the server that is not the case.
    I thought all I thought was jdbc, but I can connect to the database, so I do not know what to do and how to proceed.
    thanks to all, and thanks to my translator. :P

    Parameter par = respons.getReturnValue();There is only one possible reason, "respons" is null.

Maybe you are looking for

  • How do I fix error code 1771?

    need help i get this over and over here are the diagnostics Microsoft Windows XP Professional Service Pack 3 (Build 2600) HP Pavilion 061 PS588AA-ABA M7067C iTunes 10.6.3.25 QuickTime 7.7.2 FairPlay 1.14.43 Apple Application Support 2.1.9 iPod Update

  • Does media hub support mov video format?

    Most of my video files are stored as .mov format. I just found out that none of these video files show up the media browser. I carefully checked the datasheet and user manual. On data sheet, it's shown as supported. On user manual, it's not in the li

  • What is maintenance View . Why do we need to go for maintenance View

    Hi, I wanted to create maintenance view. Before that i wanted to know what is maintenance veiw and why do we go for maintenance view

  • IMovie '13 - v.10.0 - exporting in SD (640 x 480)???

    The new version of iMovie lost a lot of its features and is clearly focused toward the social media side of things. After importing using SD cameras that import video in a *square* PiP format, I am finding it impossible to update any of my settings t

  • Flash crash help!

    I'm working on a fairly large project right now in flash, and whenever I take the cursor in the timeline and move it back and forth, flash decides to give me a message that says: Flash.exe has generated errors and will be closed by Windows. You will