Java线程在不断的发展发展的过程中我们需要不断的学习相关代码的知识下面我们就详细的看看如何进行相关技术信息的学习在创建启动Java线程之前先创建一个线程之间竞争使用的Object对象然后将这个Object对象的引用传递给每一个线程对象的lock成员变量
这样一来每个线程的lock成员都指向同一个Object对象我们在run方法中对lock对象使用synchronzied块进行局部封锁这样就可以让Java线程去竞争这个唯一的共享的对象锁从而实现同步
代码
package comvista;
class MyThread implements javalangRunnable
{
private int threadId;
private Object lock;
public MyThread(int id Object obj)
{
thisthreadId = id;
thislock = obj;
}
@Override
public void run()
{
synchronized(lock)
{
for (int i = ; i < ; ++i)
{
Systemoutprintln(Thread ID: + thisthreadId + : + i);
}
}
}
}
public class ThreadDemo
{
/**
* @param args
* @throws InterruptedException
*/
public static void main(String[] args) throws InterruptedException
{
Object obj = new Object();
for (int i = ; i < ; ++i)
{
new Thread(new MyThread(i obj))start();
Threadsleep();
}
}
}
从第二段代码可知同步的关键是多个Java线程对象竞争同一个共享资源即可上面的代码中是通过外部创建共享资源然后传递到Java线程中来实现我们也可以利用类成员变量被所有类的实例所共享这一特性因此可以将lock用静态成员对象来实现代码如下所示
代码
package comvista;
class MyThread implements javalangRunnable
{
private int threadId;
private static Object lock = new Object();
public MyThread(int id)
{
thisthreadId = id;
}
@Override
public void run()
{
synchronized(lock)
{
for (int i = ; i < ; ++i)
{
Systemoutprintln(Thread ID: + thisthreadId + : + i);
}
}
}
}
public class ThreadDemo
{
/**
* @param args
* @throws InterruptedException
*/
public static void main(String[] args) throws InterruptedException
{
for (int i = ; i < ; ++i)
{
new Thread(new MyThread(i))start();
Threadsleep();
}
}
}
以上的代码就是对Java线程的详细介绍希望大家有所收获