By GokiSoft.com| 15:01 19/07/2023|
Java Advanced

[Share Code] Tao tác dữ liệu lên Shared Object sử dụng MultiThreading trong java - C2209I

Tao tác dữ liệu lên Shared Object sử dụng MultiThreading trong java

#BT1106.java

/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.gokisoft.java2.lesson05;

import java.util.Random;

/**
 *
 * @author teacher
 */
public class BT1106 {

    static class SharedData {

        int total;

        public SharedData() {
            total = 0;
        }

        public int getTotal() {
            return total;
        }

        public void setTotal(int total) {
            this.total = total;
        }

        public void changeTotal(int x) {
            total += x;
            System.out.println("total = " + total);
        }
        
        public boolean isRunning() {
            if(total < -100) return false;
            if(total > 100) return false;
            return true;
        }
    }

    static class Thread1 extends Thread {

        SharedData sharedData;

        public Thread1(SharedData sharedData) {
            this.sharedData = sharedData;
        }

        @Override
        public void run() {
            Random random = new Random();
            int rad;

            while (sharedData.isRunning()) {
                synchronized (sharedData) {
                    rad = random.nextInt(100);
                    //rad: 1, 2, 3, ..., 10
                    System.out.println(rad);
                    //thiet lap gia tri rad -> SharedData
                    sharedData.changeTotal(rad);
                }
            }
            
            System.out.println("T1 stop");
        }

    }

    static class Thread2 extends Thread {

        SharedData sharedData;

        public Thread2(SharedData sharedData) {
            this.sharedData = sharedData;
        }

        @Override
        public void run() {
            Random random = new Random();
            int rad;

            while (sharedData.isRunning()) {
                synchronized (sharedData) {
                    rad = -random.nextInt(100);
                    System.out.println(rad);
                    //thiet lap gia tri rad -> SharedData
                    sharedData.changeTotal(rad);
                }
            }
            
            System.out.println("T2 stop");
        }

    }

    public static void main(String[] args) {
        SharedData sharedData = new SharedData();
        Thread1 t1 = new Thread1(sharedData);
        Thread2 t2 = new Thread2(sharedData);

        t1.start();
        t2.start();
//        SharedData sharedData = new SharedData();
//        sharedData.changeTotal(1);
//        sharedData.changeTotal(2);
//        sharedData.changeTotal(3);
//        sharedData.changeTotal(4);
//        sharedData.changeTotal(5);
//        sharedData.changeTotal(6);
//        sharedData.changeTotal(7);
//        sharedData.changeTotal(8);
//        sharedData.changeTotal(9);
//        sharedData.changeTotal(10);
//        
//        System.out.println(sharedData.getTotal());
    }
}

#Main.java

/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.gokisoft.java2.lesson05;

/**
 *
 * @author teacher
 */
public class Main {
    static int x = 0;
    
    static class Thread1 extends Thread {
        @Override
        public void run() {
            for (int i = 0; i < 10; i++) {
                changeX(1);
            }
        }
    }
    
    static class Thread2 extends Thread {
        @Override
        public void run() {
            for (int i = 0; i < 10; i++) {
                changeX2(1);
            }
        }
    }
    
    public static void main(String[] args) {
        Thread1 t1 = new Thread1();
        Thread1 t2 = new Thread1();
        Thread2 t3 = new Thread2();
        
        t1.start();
        t3.start();
        t2.start();
    }
    
    //T1, T2 => queue => 
    static synchronized void changeX(int delta) {
        System.out.println(x + " + " + delta);
        x+=delta;
        System.out.println(x);
    }
    
    static synchronized void changeX2(int delta) {
        System.out.println(x + " - " + delta);
        x-=delta;
        System.out.println(x);
    }
}

#Test.java

/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.gokisoft.java2.lesson05;

/**
 *
 * @author teacher
 */
public class Test {

    static int x = 0;

    public static void main(String[] args) {
        Object obj = new Object();

        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 10; i++) {
                    synchronized (obj) {
                        System.out.println(x + " + " + 1);
                        x += 1;
                        System.out.println(x);
                    }
                }
            }
        });

        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 10; i++) {
                    synchronized (obj) {
                        System.out.println(x + " + " + 2);
                        x += 2;
                        System.out.println(x);
                    }
                }
            }
        });

        t1.start();
        t2.start();
    }
}
Tags:



Phản hồi từ học viên

5

(Dựa trên đánh giá ngày hôm nay)

Đăng nhập để làm bài kiểm tra

Chưa có kết quả nào trước đó