线程程序问题

设计 4 个线程, 其中两个线程每次对 j 增加 1, 另外两个线程对 j 每次减少 1。 写出程序。

 1 package mystudy;
 2
 3 public class ManyThreads {
 4
 5     private int j;
 6
 7     public static void main(String[] args) {
 8         // TODO Auto-generated method stub
 9         ManyThreads many = new ManyThreads();
10         Inc inc = many.new Inc();
11         Dec dec = many.new Dec();
12         for (int i = 0; i < 2; i++) {
13             Thread t = new Thread(inc);
14             t.start();
15             t = new Thread(dec);
16             t.start();
17         }
18     }
19
20     private synchronized void inc() {
21         j++;
22         System.out.println(Thread.currentThread().getName() + "inc" + j);
23     }
24
25     private synchronized void dec() {
26         j--;
27         System.out.println(Thread.currentThread().getName() + "dec" + j);
28     }
29
30     class Inc implements Runnable {
31
32         @Override
33         public void run() {
34             // TODO Auto-generated method stub
35             for (int i = 0; i < 20; i++) {
36                 inc();
37             }
38         }
39
40     }
41
42     class Dec implements Runnable {
43
44         @Override
45         public void run() {
46             // TODO Auto-generated method stub
47             for (int i = 0; i < 20; i++) {
48                 dec();
49             }
50         }
51
52     }
53 }

第二种

时间: 2024-12-13 00:11:11

线程程序问题的相关文章

linux程序设计——第一个线程程序(第十二章)

第12章    POSIX线程 在第11章中,介绍了如何在linux中处理进程.但有时人们认为,用fork调用来创建新进程的代价太高.在这种情况下,如果能让一个进程同时做两件事情或者至少看起来是这样会非常有用,而且,人们页希望能有两件或更多的事情以一种非常紧密的方式同时发生,这就需要线程发挥作用了. 12.1    什么是线程 在一个程序中多个执行路线就叫做线程(thread).更准确的定义是:线程是一个进程内部的一个控制序列.虽然linux和许多其他的操作系统一样,都擅长同时运行多个进程,但迄

Windows多线程开发之并发线程程序研究

做为一名分布式服务器开发人员,在服务器开发领域.多线程开发和并发编程方面有自己的心得和经验,愿意分享给同仁,今讨论下Windows下线程并发程序开发. 下面用用两个线程实现一个简单的数组排序,演示了线程的基本用法. 原理是: 为了节省执行时间而添加并行,把问题划分为几个小问题,并分配给几个线程(分而治之),把问题划分成若干更小的单元,更容易在实现中创建并行逻辑.同时,在并行中使用系统资源能优化应用程序并提高其运行速度. #include "stdafx.h"  #include <

APUE 线程 - 程序清单

程序清单11-1 打印线程ID #include "util.h" #include<pthread.h> pthread_t ntid; void printids(const char *s) { pid_t pid; pthread_t tid; pid = getpid(); tid = pthread_self(); //之所以打印16进制,便于pthread_t是结构体的话看地址: printf("%s pid %u tid %u (0x%x)\n&q

程序,进程,线程(需补充)

1.程序,进程,线程 程序:程序时完成特定任务的一系列指令集合. 进程:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程:线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发

POSIX 线程详解(经典必看)

总共三部分: 第一部分:POSIX 线程详解                                   Daniel Robbins ([email protected]), 总裁/CEO, Gentoo Technologies, Inc.  2000 年 7 月 01 日 第二部分:通用线程:POSIX 线程详解,第 2部分       Daniel Robbins ([email protected]), 总裁/CEO, Gentoo Technologies, Inc.  20

线程安全

一:线程简单实现的三种方 (1)第一种创建线程的方式是直接extends Thread 覆盖run()方法即可.代码如下: public class ThreadA extends Thread { public void run (){ super.run(); try { Thread.sleep(500);//模拟做事情执行了500ms }catch (interruptedException e) { //中断故障异常 e.printStackTrace(); } System.out.

Python学习——Python线程

一.线程创建 1 #方法一:将要执行的方法作为参数传给Thread的构造方法 2 import threading 3 import time 4 5 def show(arg): 6 time.sleep(2) 7 print('thread' + str(arg)) 8 9 for i in range(10): 10 t = threading.Thread(target=show,args=(i,)) 11 time.sleep(2) 12 t.start() 13 14 #方法2:从T

BOOST 线程完全攻略

1 创建线程 首先看看boost::thread的构造函数吧,boost::thread有两个构造函数: (1)thread():构造一个表示当前执行线程的线程对象: (2)explicit thread(const boost::function0& threadfunc):      boost::function0可以简单看为:一个无返回(返回void),无参数的函数.这里的函数也可以是类重载operator()构成的函数:该构造函数传入的是函数对象而并非是函数指针,这样一个具有一般函数特

java线程小结1

1.创建线程的两种方法 新线程的创建和启动都是通过java代码触发的.除了第一个线程(也就是启动程序的.运行main()方法的线程)是由java平台直接创建的之外,其余的线程都是在java代码中通过“创建Thread类的实例,启动线程”这种方式创建并启动的. 当启动一个新的线程时,其过程是:由java代码通知java平台,java平台再启动线程.线程1启动线程2的过程实际就是线程1执行thread.start(),这对于线程1来说是一个很短的过程,因为启动线程的具体工作都是java平台做的,线程