线程对象只能启动一个线程
不管是通过继承Thread,还是通过实现Runnable接口创建线程,他们的一个对象只能启动(即start())一次,否则会抛出异常java.lang.IllegalThreadStateException
线程并发问题
多线程并发会带来线程安全问题
java处理线程同步的方法非常简单,只需在需要同步的代码段用
synchronized(object){需要同步的代码}即可
object代表对象锁
当一个线程在执行时,其余线程会被放入线程等待池
测试如下
public class test {
public static void main(String[] args) {
// TODO Auto-generated method stub
SyncThread syncThread = new SyncThread();
Thread thread1 = new Thread(new SyncThread(), "SyncThread1");
Thread thread2 = new Thread(new SyncThread(), "SyncThread2");
thread1.start();
thread2.start();
}
}
/**
2 * 同步线程
3 */
class SyncThread implements Runnable {
private static int count;
public SyncThread() {
count = 0;
}
public void run() {
synchronized(this) {
for (int i = 0; i < 5; i++) {
try {
System.out.println(Thread.currentThread().getName() + ":" + (count++)); Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public int getCount() {
return count;
}
}
运行结果
SyncThread1:0
SyncThread2:1
SyncThread1:2
SyncThread2:3
SyncThread2:5
SyncThread1:4
SyncThread1:7
SyncThread2:6
SyncThread2:9
SyncThread1:8
测试结果与预期有出入,并没有按照1.2的顺序交错执行。
求大佬指点。
本文探讨了Java线程的基本使用,强调一个线程对象只能启动一次,否则会导致异常。同时,文章讨论了多线程并发带来的线程安全问题,并介绍了如何使用`synchronized`关键字进行线程同步,确保线程安全。然而,在实际测试中,同步代码块并未按预期顺序执行,期待读者给出解答。

被折叠的 条评论
为什么被折叠?



