下面展示一些 内联代码片
。
// 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("输入的边长不合法,请输入有效数字");
}
}
}