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)