我确实不懂synchronized,我的意思是这样 线程: page_thread extends Thread{ private Object object; private int page_order=1;//代表页面顺序号 . public synchronized int page_add()//每运行一个这样的线程,应该使得页面加1,以便下一个线程不会处理同一个页面. { page_order ++; return page_order; } public void run() { process page,//里面应该包括一个参数是第几页 } } 不知这样定义对不对,在主程序里又是怎么样调用这个page_add()呢?
thread.jion() 等此现成运行完之后在运行下面的
楼主,我猜想你的意思是:你有很多个page,这些page可能是存在一个数组里面,或者是在一个LinkedList里面,然后你有多个线程在操作这个page数组,但每当一个线程从数组里取page的时候,你希望它取的是上一个线程操作的下一个page,是这样吗?方法如下:你可以先建立一个类来包装你的这些page (假设你已经有一个class Page) class Pages { private Page[] pages = new Page[10];//假设你只需要10个page private int pageCount = 0; public Pages(){/*在constructor里初始化pages数组的每个元素*/} // 下面这个method是关键 public synchronized Page getPage(){ System.out.println("Page Count: " + pageCount); return pages[pageCount++]; } }class TestThreadA extends Thread{ Pages pages; public TestThreadA(Pages pages){ this.pages = pages; } public void run(){ Page p = pages.getPage(); // do something on p }class TestThreadB extends Thread{ Pages pages; public TestThreadB(Pages pages){ this.pages = pages; } public void run(){ Page p = pages.getPage(); // do something on p } // 下面这个class是示范你怎么用的 public class Test{ public static void main(String[] args){ Pages pages = new Pages(); TestThreadA a = new TestThreadA(pages); TestThreadB b = new TestThreadB(pages); TestThreadA aa = new TestThreadC(pages); a.start(); b.start(); c.start(); } }在main里面新建了三个线程,你可以看这三个线程的类的定义TestThreadA和TestThreadB,这三个线程都试图从pages里取出一个page。 但由于在class Pages里,getPage()这个方法是sychronized,所以在任何时刻,只有一个线程可以调用getPage()这个方法。 这也就保证了只有当一个线程取完page以后,另一个线程才可以取page. 请记住: 取page的唯一方法只有调用getPage(),而这个方法不允许多个线程同时调用它。 所以这就解决了楼主的问题了不知道偶的理解时候正确
线程:
page_thread extends Thread{
private Object object;
private int page_order=1;//代表页面顺序号 .
public synchronized int page_add()//每运行一个这样的线程,应该使得页面加1,以便下一个线程不会处理同一个页面.
{
page_order ++;
return page_order;
}
public void run()
{
process page,//里面应该包括一个参数是第几页
}
}
不知这样定义对不对,在主程序里又是怎么样调用这个page_add()呢?
等此现成运行完之后在运行下面的
class Pages {
private Page[] pages = new Page[10];//假设你只需要10个page
private int pageCount = 0;
public Pages(){/*在constructor里初始化pages数组的每个元素*/}
// 下面这个method是关键
public synchronized Page getPage(){
System.out.println("Page Count: " + pageCount);
return pages[pageCount++];
}
}class TestThreadA extends Thread{
Pages pages;
public TestThreadA(Pages pages){ this.pages = pages; }
public void run(){
Page p = pages.getPage();
// do something on p
}class TestThreadB extends Thread{
Pages pages;
public TestThreadB(Pages pages){ this.pages = pages; }
public void run(){
Page p = pages.getPage();
// do something on p
}
// 下面这个class是示范你怎么用的
public class Test{
public static void main(String[] args){
Pages pages = new Pages();
TestThreadA a = new TestThreadA(pages);
TestThreadB b = new TestThreadB(pages);
TestThreadA aa = new TestThreadC(pages);
a.start();
b.start();
c.start();
}
}在main里面新建了三个线程,你可以看这三个线程的类的定义TestThreadA和TestThreadB,这三个线程都试图从pages里取出一个page。 但由于在class Pages里,getPage()这个方法是sychronized,所以在任何时刻,只有一个线程可以调用getPage()这个方法。 这也就保证了只有当一个线程取完page以后,另一个线程才可以取page. 请记住: 取page的唯一方法只有调用getPage(),而这个方法不允许多个线程同时调用它。 所以这就解决了楼主的问题了不知道偶的理解时候正确