沸羊羊202_(yyy)

文章展示了三个Java代码示例,涉及线程同步和锁的使用。第一个例子使用ReentrantLock实现线程安全的插入操作,确保资源的互斥访问。第二个例子通过synchronized关键字在多线程环境下模拟售票过程,保证了卖票的顺序。第三个例子创建了一个简单的GUI应用,用于计算三角形的周长和面积,验证用户输入的边长是否能构成有效三角形。
摘要由CSDN通过智能技术生成

下面展示一些 内联代码片

// A code block
var foo = 'bar';
package step3;

import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class Task {

	public static void main(String[] args) {
		final Insert insert = new Insert();
		Thread t1 = new Thread(new Runnable() {
			public void run() {
				insert.insert(Thread.currentThread());
			}
		});

		Thread t2 = new Thread(new Runnable() {
			public void run() {
				insert.insert(Thread.currentThread());
			}
		});

		Thread t3 = new Thread(new Runnable() {
			public void run() {
				insert.insert(Thread.currentThread());
			}
		});
		// 设置线程优先级
		t1.setPriority(Thread.MAX_PRIORITY);
		t2.setPriority(Thread.NORM_PRIORITY);
		t3.setPriority(Thread.MIN_PRIORITY);

		t1.start();
		t2.start();
		t3.start();

	}
}

class Insert {

	public static int num;

	// 在这里定义Lock
    Lock lock = new ReentrantLock();
	public void insert(Thread thread) {
		/********* Begin *********/
		lock.lock();
		try {
            System.out.println(thread.getName()+"得到了锁");
            for (int i = 0; i < 5; i++) {
                num++;
                System.out.println(num);
            }
        }catch (Exception e) {
           
        }finally {
            System.out.println(thread.getName()+"释放了锁");
            lock.unlock();
        }
		
		
		/********* End *********/
	}

}

结果:
Thread-0得到了锁
1
2
3
4
5
Thread-0释放了锁
Thread-1得到了锁
6
7
8
9
10
Thread-1释放了锁
Thread-2得到了锁
11
12
13
14
15
Thread-2释放了锁

下面展示一些 内联代码片

// A code block
var foo = 'bar';
// An highlighted block
package step2;

/********* Begin *********/
//定义站台类,实现卖票的功能。
public class Station extends Thread {
   private static int tickets = 20; // 静态变量,三个线程共享
    private static final Object lock = new Object(); // 锁对象
    private static boolean isSoldOut = false;

    @Override
    public void run() {
        // 模拟售票的过程,只要票未售完,就一直循环卖票
        while (true) {
            synchronized (lock) {
                if (tickets > 0) {
                    try {
                        Thread.sleep(100); // 模拟售票过程需要时间
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("卖出了第" + tickets + "张票");
                    tickets--;
                } else if (!isSoldOut) {
                    isSoldOut = true;
                    System.out.println("票卖完了");
                }
            }
            // 如果票已经售完,退出循环
            if (isSoldOut) {
                break;
            }
        }
    }

    public static void main(String[] args) {
        Station s = new Station();
        // 启动三个线程,分别模拟多个窗口售票
        Thread thread1 = new Thread(s);
        Thread thread2 = new Thread(s);
        Thread thread3 = new Thread(s);
        thread1.start();
        thread2.start();
        thread3.start();
    }
}
/********* End *********/

下面展示一些 内联代码片

// A code block
var foo = 'bar';
// An highlighted block
package step1;

public class Task {
	public static void main(String[] args) throws Exception {
		/********* Begin *********/
		Object a=new Object();
        Object b=new Object();
        Object c=new Object();
        MyThread t1 = new MyThread("AA",a,b);
        MyThread t2 = new MyThread("BB",b,c);
        MyThread t3 = new MyThread("CC",c,a);
        new Thread(t1).start();
        //t1.start();
        Thread.sleep(100);
        new Thread(t2).start();
        //t2.start();
        Thread.sleep(100);
        new Thread(t3).start();
        //t3.start();
        Thread.sleep(100);

		/********* End *********/
	}
}

class MyThread extends Thread {
	/********* Begin *********/

	Object prev;
	Object self;
	
	String threadName;
	public MyThread(String threadName,Object prev,Object self) {
		this.threadName=threadName;
		this.prev=prev;
		this.self=self;
	}

	public void run() {
		int count = 5;
		
		while(count > 0){
			synchronized(prev) {
				synchronized(self) {
					System.out.println("Java Thread" + this.threadName);
			count--;
			self.notify();
				}
				try {
					prev.wait();
				}catch(Exception e) {
				e.printStackTrace();	
				}
			}		
		}
		System.exit(0);
	
	}


	/********* End *********/
}


Java ThreadAA
Java ThreadBB
Java ThreadCC
Java ThreadAA
Java ThreadBB
Java ThreadCC
Java ThreadAA
Java ThreadBB
Java ThreadCC
Java ThreadAA
Java ThreadBB
Java ThreadCC
Java ThreadAA
Java ThreadBB
Java ThreadCC

下面展示一些 内联代码片

// A code block
var foo = 'bar';
//三角形

import java.awt.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.awt.event.*;


public class task_3 extends JFrame {

    private JPanel contentPane;
    private JTextField textFieldA;
    private JTextField textFieldB;
    private JTextField textFieldC;
    private JLabel lblResultMsg;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                	task_3 frame = new task_3();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public task_3() {
        setTitle("三角形计算器");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JLabel lblSideA = new JLabel("边长A:");
        lblSideA.setBounds(69, 52, 54, 15);
        contentPane.add(lblSideA);

        JLabel lblSideB = new JLabel("边长B:");
        lblSideB.setBounds(69, 87, 54, 15);
        contentPane.add(lblSideB);

        JLabel lblSideC = new JLabel("边长C:");
        lblSideC.setBounds(69, 122, 54, 15);
        contentPane.add(lblSideC);

        textFieldA = new JTextField();
        textFieldA.setBounds(133, 49, 163, 21);
        contentPane.add(textFieldA);
        textFieldA.setColumns(10);

        textFieldB = new JTextField();
        textFieldB.setBounds(133, 84, 163, 21);
        contentPane.add(textFieldB);
        textFieldB.setColumns(10);

        textFieldC = new JTextField();
        textFieldC.setBounds(133, 119, 163, 21);
        contentPane.add(textFieldC);
        textFieldC.setColumns(10);

        JButton btnCalculate = new JButton("计算");
        btnCalculate.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                calculateTriangle();
            }
        });
        btnCalculate.setBounds(142, 172, 93, 23);
        contentPane.add(btnCalculate);

        lblResultMsg = new JLabel("");
        lblResultMsg.setBounds(69, 215, 341, 15);
        contentPane.add(lblResultMsg);
    }

    private void calculateTriangle() {
        try {
            double a = Double.parseDouble(textFieldA.getText());
            double b = Double.parseDouble(textFieldB.getText());
            double c = Double.parseDouble(textFieldC.getText());

            if (a + b > c && a + c > b && b + c > a) {
                // 计算周长
                double perimeter = a + b + c;
                // 计算面积
                double p = perimeter / 2; // 半周长
                double area = Math.sqrt(p * (p - a) * (p - b) * (p - c));
                lblResultMsg.setText("该三角形的周长为" + perimeter + ", 面积为" + area);
            } else {
                lblResultMsg.setText("输入的边长无法构成一个三角形");
            }
        } catch (NumberFormatException e) {
            lblResultMsg.setText("输入的边长不合法,请输入有效数字");
        }
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值