Thread

Diskutiere Thread im Java Basics - Anfänger-Themen Bereich.
A

Adriano10

Also es ist gegeben
Code:
 class Output extends Thread {

 public void run() {
 synchronized (InOut.getLock()) {
 if (!InOut.isEntered()) {
 try {
 InOut.getLock().wait();
 } catch (InterruptedException e) { }
 } System.out.println(InOut.getValue() * InOut.getValue());
 }
 }
 }

 class Input extends Thread {

 public void run() {
 synchronized (InOut.getLock()) {
 InOut.setValue(IO.readInt(”Value: ”));
 InOut.setEntered(true);
 InOut.getLock().notify();
 } }
 }

 public class InOut {

 private static Object lock = new Object();
 private static boolean entered = false;
 private static int value = 0;

 public static Object getLock() { return lock; }

 public static boolean isEntered() { return entered; }

 public static void setEntered(boolean entered) { InOut.entered = entered; }

 public static int getValue() { return value; }

 public static void setValue(int value) { InOut.value = value; }

 public static void main(String[] args) {
 new Output().start();
 new Input().start();
 }

 }
Die Aufgabe ist:
Wandeln Sie dann die drei gegebenen Klassen in drei jeweils äquivalente Klassen um, in denen aber kein synchronized, kein wait und kein notify mehr vorkommen, sondern zur Synchronisation der beiden Threads das Konzept der Semaphore auf der Grundlage der Klasse java.util.concurrent.Semaphore verwendet wird.


Ich wollte mithilfe von euch überprüfen, ob ich alles richtig gemacht habe, da diese Threads meine Schwachstelle sind....

wenn ich teste, dann Thread_0 ist Eingabe und Thread_1 gibt berechnet aus...

Java:
import java.util.concurrent.Semaphore;

import EinfacheElemente.IO;

public class Input extends Thread {

    @Override
    public void run() {

        InOut.count++;
    
        if(InOut.count == 1) {
    
            try {
                InOut.getSem().acquire();
            InOut.setValue(IO.readInt(getName() + ": " + "Value: "));
            //InOut.setEntered(true);
            }catch(InterruptedException e) {
                
            }
    InOut.getSem().release();
    }
    }
        
    

}

import java.util.concurrent.Semaphore;

public class Output extends Thread {
    

    
    @Override
    public void run() {
        InOut.count--;
        if(InOut.count == 0) {   
            
            
                try {
                InOut.getSem().acquire();
                
                System.out.println(getName() + ": " + InOut.getValue() * InOut.getValue());
                }catch(InterruptedException e) {
                    
                }
                            
    InOut.getSem().release();
        }
    }
}

import java.util.concurrent.Semaphore;

public class InOut {
    private static Semaphore sem = new Semaphore(1);
    
    private static boolean entered = false;
    private static int value = 0;
    protected static int count = 0;
    

    public static Semaphore getSem() {
        return sem;
    }

    public static void setSem(Semaphore sem) {
        InOut.sem = sem;
    }

    public static boolean isEntered() {
        return entered;
    }

    public static void setEntered(boolean entered) {
        InOut.entered = entered;
    }

    public static int getValue() {
        return value;
    }

    public static void setValue(int value) {
        InOut.value = value;
    }

    public static void main(String[] args) {
        new Input().start();
        new Output().start();
        
        try {
        
            new Input().join();
new Output().join();
            
            
        } catch (InterruptedException e) {

        }
    }
}
 
Thema: 

Thread

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben