设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。public class ThreadTest1{
private int j;
public static void main(String args[]){
ThreadTest1 tt=new ThreadTest1();
Inc inc=tt.new Inc(); //??? 为什么可以写成tt.new 这样子的呢,看不懂,涉及哪方面的知识呢;
Dec dec=tt.new Dec();
for(int i=0;i<2;i++){
Thread t=new Thread(inc);
t.start();
t=new Thread(dec); //???这个前面不要加Thread吗
t.start();
}
}
private synchronized void inc(){ //???为什么要加锁呢 不加可以吗
j++;
System.out.println(Thread.currentThread().getName()+"-inc:"+j);
} //???currentThread()有什么作用呢是什么方法
//???getname呢
private synchronized void dec(){
j--;
System.out.println(Thread.currentThread().getName()+"-dec:"+j);
}
class Inc implements Runnable{
public void run(){
for(int i=0;i<100;i++){
inc();
}
}
}
class Dec implements Runnable{
public void run(){
for(int i=0;i<100;i++){
dec();
}
}
}
}
private int j;
public static void main(String args[]){
ThreadTest1 tt=new ThreadTest1();
Inc inc=tt.new Inc(); //??? 为什么可以写成tt.new 这样子的呢,看不懂,涉及哪方面的知识呢;
Dec dec=tt.new Dec();
for(int i=0;i<2;i++){
Thread t=new Thread(inc);
t.start();
t=new Thread(dec); //???这个前面不要加Thread吗
t.start();
}
}
private synchronized void inc(){ //???为什么要加锁呢 不加可以吗
j++;
System.out.println(Thread.currentThread().getName()+"-inc:"+j);
} //???currentThread()有什么作用呢是什么方法
//???getname呢
private synchronized void dec(){
j--;
System.out.println(Thread.currentThread().getName()+"-dec:"+j);
}
class Inc implements Runnable{
public void run(){
for(int i=0;i<100;i++){
inc();
}
}
}
class Dec implements Runnable{
public void run(){
for(int i=0;i<100;i++){
dec();
}
}
}
}
解决方案 »
- java jdbc连接数据如何接收反馈信息! 比如在不存在表插入数据!
- 有谁在AIX下装过jdk,请教一个问题
- 有一个图形化的程序,没有源码,怎样调用这样的程序在文本框输入数据并得到返回值
- java 能连上 sql server2000 ,但数据写不进数据库,求助高手!
- 怎么用程序下载整个网站?
- php运行jar包时出现的一个奇怪的现象
- 请问哪里可以下载JAVA安装程序
- java数据库问题
- 怎样截取网页上的applet图形,可以copy到剪贴本或word,excel上?
- 各位夏帮个忙看看这断程序!!
- SpingLayout中的问题
- java模拟电信月末计费的小程序(那位高手帮忙看看错在那里啊?)
这是实例化一个内部类对象。
//???为什么要加锁呢 不加可以吗
加锁保护数据在被一个线程访问期间不能被其它线程序访问!你上厕所的时候当然要把门锁好,要不妇女闯进来不坏事了?你完事后再打开门,让别人来用,一样的道理!呵呵~~~
//???currentThread()有什么作用呢是什么方法 //???getname呢
currentThread方法获得当前在运行的线程,getname获得当前线程的名字!(多看API文档)
你的代码有点乱,不知是不是我理解能力有问题!
我试着写了一段,不知各符合主考官的本意!class MyThreadTest
{
int i=0,cnt=0;
public static void main(String[] args)
{
MyThreadTest mt=new MyThreadTest();
ThreadPlus t1=mt.new ThreadPlus("Thread1");
ThreadPlus t2=mt.new ThreadPlus("Thread2");
ThreadMinus t3=mt.new ThreadMinus("Thread3");
ThreadMinus t4=mt.new ThreadMinus("Thread4");
t1.start();
t2.start();
t3.start();
t4.start();
}
class ThreadPlus extends Thread
{
ThreadPlus(String str)
{
super(str);
}
public void run()
{
while(true){
PMOne(true);
yield();
}
}
}
class ThreadMinus extends Thread
{
ThreadMinus(String str)
{
super(str);
}
public void run()
{
while(true){
PMOne(false);
yield();
}
}
}
public synchronized void PMOne(boolean PorM)
{
if(PorM==true)
{
i++;
}
else
{
i--;
}
System.out.println(Thread.currentThread().getName()+":"+i);
if(cnt++==1000) System.exit(0);
}
}其实这段代码俺也不是很满意的,有wait()notify()方法可以等待和唤醒线程,可俺不太知道用了,只在双线程中用过!
都是书上的东西.
俺接触java也才一个月多,不过以前学过c、vb.net,现在java对俺来讲,不敢说是游刃有余,但一些概念不用看就知道,容易得很!
在广州的朋友,推荐哈哪有工作找找哩?楼主不赖啊,给俺加了分哈,要知道要昨晚熬了多久…………
唉,习惯了~~~