Java线程题
2015-10-17 16:25
447 查看
参考:Java初学者的博客,网址为:http://skyuck.iteye.com/blog/540660
参考:mars914的博客,网址:http://mars914.iteye.com/blog/1508429
设计4个线程,其中两个每次相加均增加1,另外2个线程每次减少1.
其中:new Thread(参数) ;//此参数需要为new Thread()或者继承了Runnable(因为Java为单继承,所以,有继承的类也可以实现Runnable接口(间接进行了继承))
package thread;
//设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
public class ThreadTest {
private int j;
private synchronized void add(){
j++;
System.out.println(Thread.currentThread().getName()+" -add:"+j);
}
private synchronized void dec(){
j--;
System.out.println(Thread.currentThread().getName()+" -dec:"+j);
}
class Add implements Runnable{ //每次增加1
@Override
public void run() {
add();
}
}
class DEC implements Runnable{ //每次增加1
@Override
public void run() {
dec();
}
}
public static void main(String[] args){
ThreadTest tt=new ThreadTest();
Add add=tt.new Add();
DEC dec=tt.new DEC();
for(int i=0;i<2;i++){
Thread t=new Thread(add); //add实现了Runnable接口
t.start();
t=new Thread(dec);
t.start();
}
}
}
2 火车票的继承
synchronized(this){
。。。。
}
Thread的写法
package com.threadtest;
class MyThread extends Thread{
private int ticket = 10;
private String name;
public MyThread(String name){
this.name =name;
}
public void run(){
for(int i =0;i<500;i++){
if(this.ticket>0){
System.out.println(this.name+"卖票---->"+(this.ticket--));
}
}
}
}
public class ThreadDemo {
public static void main(String[] args) {
MyThread mt1= new MyThread("一号窗口");
MyThread mt2= new MyThread("二号窗口");
MyThread mt3= new MyThread("三号窗口");
mt1.start();
mt2.start();
mt3.start();
}
}
效果:
一号窗口卖票---->10
一号窗口卖票---->9
二号窗口卖票---->10
一号窗口卖票---->8
一号窗口卖票---->7
一号窗口卖票---->6
三号窗口卖票---->10
一号窗口卖票---->5
一号窗口卖票---->4
一号窗口卖票---->3
一号窗口卖票---->2
一号窗口卖票---->1
二号窗口卖票---->9
二号窗口卖票---->8
三号窗口卖票---->9
三号窗口卖票---->8
三号窗口卖票---->7
三号窗口卖票---->6
三号窗口卖票---->5
三号窗口卖票---->4
三号窗口卖票---->3
三号窗口卖票---->2
三号窗口卖票---->1
二号窗口卖票---->7
二号窗口卖票---->6
二号窗口卖票---->5
二号窗口卖票---->4
二号窗口卖票---->3
二号窗口卖票---->2
二号窗口卖票---->1
Runnable的写法:
package com.threadtest;
class MyThread1 implements Runnable{
private int ticket =10;
private String name;
public void run(){
for(int i =0;i<500;i++){
if(this.ticket>0){
System.out.println(Thread.currentThread().getName()+"卖票---->"+(this.ticket--));
}
}
}
}
public class RunnableDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
//设计三个线程
MyThread1 mt = new MyThread1();
Thread t1 = new Thread(mt,"一号窗口");
Thread t2 = new Thread(mt,"二号窗口");
Thread t3 = new Thread(mt,"三号窗口");
// MyThread1 mt2 = new MyThread1();
// MyThread1 mt3 = new MyThread1();
t1.start();
t2.start();
t3.start();
}
}
参考:mars914的博客,网址:http://mars914.iteye.com/blog/1508429
设计4个线程,其中两个每次相加均增加1,另外2个线程每次减少1.
其中:new Thread(参数) ;//此参数需要为new Thread()或者继承了Runnable(因为Java为单继承,所以,有继承的类也可以实现Runnable接口(间接进行了继承))
package thread;
//设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
public class ThreadTest {
private int j;
private synchronized void add(){
j++;
System.out.println(Thread.currentThread().getName()+" -add:"+j);
}
private synchronized void dec(){
j--;
System.out.println(Thread.currentThread().getName()+" -dec:"+j);
}
class Add implements Runnable{ //每次增加1
@Override
public void run() {
add();
}
}
class DEC implements Runnable{ //每次增加1
@Override
public void run() {
dec();
}
}
public static void main(String[] args){
ThreadTest tt=new ThreadTest();
Add add=tt.new Add();
DEC dec=tt.new DEC();
for(int i=0;i<2;i++){
Thread t=new Thread(add); //add实现了Runnable接口
t.start();
t=new Thread(dec);
t.start();
}
}
}
2 火车票的继承
synchronized(this){
。。。。
}
Thread的写法
package com.threadtest;
class MyThread extends Thread{
private int ticket = 10;
private String name;
public MyThread(String name){
this.name =name;
}
public void run(){
for(int i =0;i<500;i++){
if(this.ticket>0){
System.out.println(this.name+"卖票---->"+(this.ticket--));
}
}
}
}
public class ThreadDemo {
public static void main(String[] args) {
MyThread mt1= new MyThread("一号窗口");
MyThread mt2= new MyThread("二号窗口");
MyThread mt3= new MyThread("三号窗口");
mt1.start();
mt2.start();
mt3.start();
}
}
效果:
一号窗口卖票---->10
一号窗口卖票---->9
二号窗口卖票---->10
一号窗口卖票---->8
一号窗口卖票---->7
一号窗口卖票---->6
三号窗口卖票---->10
一号窗口卖票---->5
一号窗口卖票---->4
一号窗口卖票---->3
一号窗口卖票---->2
一号窗口卖票---->1
二号窗口卖票---->9
二号窗口卖票---->8
三号窗口卖票---->9
三号窗口卖票---->8
三号窗口卖票---->7
三号窗口卖票---->6
三号窗口卖票---->5
三号窗口卖票---->4
三号窗口卖票---->3
三号窗口卖票---->2
三号窗口卖票---->1
二号窗口卖票---->7
二号窗口卖票---->6
二号窗口卖票---->5
二号窗口卖票---->4
二号窗口卖票---->3
二号窗口卖票---->2
二号窗口卖票---->1
Runnable的写法:
package com.threadtest;
class MyThread1 implements Runnable{
private int ticket =10;
private String name;
public void run(){
for(int i =0;i<500;i++){
if(this.ticket>0){
System.out.println(Thread.currentThread().getName()+"卖票---->"+(this.ticket--));
}
}
}
}
public class RunnableDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
//设计三个线程
MyThread1 mt = new MyThread1();
Thread t1 = new Thread(mt,"一号窗口");
Thread t2 = new Thread(mt,"二号窗口");
Thread t3 = new Thread(mt,"三号窗口");
// MyThread1 mt2 = new MyThread1();
// MyThread1 mt3 = new MyThread1();
t1.start();
t2.start();
t3.start();
}
}