We develop channel-aware opportunistic spectrum access strategies for cognitive radio networks consisting of multiple secondary users. In addition to balancing between the cost of foregoing weaker transmission opportunities in pursuit of channels that offer better data rates, we consider collisions between primary users (PUs) and secondary users (SUs), and among the SUs themselves. We derive strategies for both cooperative setting where SUs maximize their sum total of throughputs, as well as non-cooperative, game theoretic setting where each SU tries to maximize its own throughput. We show that the optimal schemes for both scenarios are pure threshold policies, where each SU decides to use or skip transmission opportunities by comparing the channel qualities to a fixed threshold. In the non-cooperative case, we establish the existence of Nash equilibrium and develop best response strategies that can converge to equilibria, with SUs relying only on their local observations. We study the tradeoff between maximal throughput in cooperative setting and fairness in the non-cooperative setting, and schemes based on utility functions and pricing that mitigate this tradeoff. Lastly, we analyze the issue of interference of SUs to the PUs. We show numerical results illustrating the schemes and analysis.